用[super initWithStyle:UITableViewStyleGrouped]初始化UITableViewController
问题描述:
正如我理解这正确地形成Apple Api,使用initWithStyle方法初始化UITableViewController时,它应该返回一个对self.tableView中的UITableView的引用。这是有道理的,因为你无法在初始化后改变tableView的风格。用[super initWithStyle:UITableViewStyleGrouped]初始化UITableViewController
但在我的情况下,这不会发生。
- (id)initWithSomeData:(SomeData *)someData {
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
}
NSLog(@"self? %@ tableView? %@", self, self.tableView);
return self;
}
此显示器是self的对象ID,但self.tableView为null。 我做错了什么? 我没有使用接口构建器!
答案: Jan事实上是正确的,我发现UITableViewController的初始化过程与普通的UIViewController有些不同。
我的理解是,在创建时,init方法中的一个被调用,并且会在调用任何其他方法(loadView,viewDidLoad)之前完成。这对于UIViewController是正确的,但对于UITableViewController不适用。
UITableViewController initWithStyle初始化程序实际上调用loadView和viewDidLoad作为其初始化过程的一部分。 self.tableView的属性是在loadView中设置的,但是如果您重写了loadView,那么我不这么做,因此self.tableView没有被设置。
答
tableView
对象可能是在稍后创建的。尽量覆盖:
-(void)viewDidLoad;
self.tableView
应指向在该点有效的对象。
这是一个很好的idee Jan,不幸的是,行NSLog(@“tableView?%@”,self.tableView);当作为LoadView中的第一行放置时,导致我的应用程序崩溃。并且在放置在viewDidLoad中时也会返回null null – DIJ 2011-04-11 12:21:53
这很奇怪,在其他地方一定有错误,你可以发布整个类吗? – 2011-04-11 12:40:54
我真的发现了这个问题,想把它作为我自己的问题的答案发布,但这不允许在24小时内为新用户...奇怪。 – DIJ 2011-04-11 12:50:20