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;
}
Другие вопросы по тегам