正如我对Apple Api的正确理解,当使用initWithStyle方法初始化UITableViewController时,它应该返回一个对self.tableView中的UITableView的引用。这是有道理的,因为你无法在初始化后改变tableView的样式。
但在我的情况下,这不会发生。
- (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。
答案 0 :(得分:1)
tableView
对象可能在稍后创建。尝试覆盖:
-(void)viewDidLoad;
self.tableView
应指向此时的有效对象。