initWithStyle :( UITableViewStyle)样式看起来没有被调用

时间:2013-09-21 04:39:19

标签: uitableview initwithstyle

UITableViewController中创建.m的默认视图控制器,默认的init方法如下

- (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,app就可以了。

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 个答案:

答案 0 :(得分:3)

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;
}