使用[super initWithStyle:UITableViewStyleGrouped]初始化UITableViewController

时间:2011-04-11 12:05:27

标签: iphone ios uitableview

正如我对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。

1 个答案:

答案 0 :(得分:1)

tableView对象可能在稍后创建。尝试覆盖:

-(void)viewDidLoad; 

self.tableView应指向此时的有效对象。