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