initWithStyle:(UITableViewStyle) стиль выглядит не вызванным
Создать контроллер представления по умолчанию UITableViewController
в своем .m
, метод инициализации по умолчанию, как показано ниже
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
// Custom initialization
}
return self;
}
после стандартной процедуры добавления источника данных и делегирования методов, исправьте табличное представление, показанное на симуляторе iPhone.
мой вопрос, при попытке добавить NSLog(@"did init");
в if
как ниже
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
// Custom initialization
NSLog(@"did init");
}
return self;
}
но беги снова, did init
не показывать на консоли. даже двигаться NSLog
до или после if
ни то, ни другое не работает!
В чем проблема? Зачем initWithStyle:(UITableViewStyle)style
не работа?
при использовании initWithCoder
как предложено Майклом
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"init?");
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
NSLog(@"init done");
}
return self;
}
init?
а также init done
работал и показывался на консоли. Но неудача тоже.
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
На самом деле, если удалить `initWithCoder, приложение в порядке.
Коды в cellForRowAtIndexPath
как следует,
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
NSArray * array = [[temp objectAtIndex:indexPath.section] valueForKey:@"English"];
cell.textLabel.text = [array objectAtIndex:indexPath.row];
if (indexPath.row == 0) {
cell.textLabel.textColor = [UIColor blueColor];
}
return cell;
1 ответ
"initWithStyle:
"это то, что называют созданием UITableViewController из кода.
Если вы создаете объект из раскадровки, метод, который действительно вызывается, выглядит так:
- (id)initWithCoder:(NSCoder *)decoder
Вы также получите "awakeFromNib
сообщение тоже.
ИЗМЕНЕНО, чтобы добавить:
Если вы пытаетесь что-то сделать со своимinitWithCoder
"метод, вызов"super
"а также вот так:
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"init?");
self = [super initWithCoder: aDecoder];
if (self) {
NSLog(@"init done");
}
return self;
}