初始化后,UITableViewController中的tableView为nil

时间:2012-09-18 10:49:57

标签: iphone objective-c ios cocoa-touch

我在UITableViewController的子类中有以下代码。在iOS 5.1下它工作正常,但在iOS 6下,self.tableView是nil(在模拟器和真实设备上)。我做错了吗?为什么在init之后不能立即设置视图?

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];

    if (self) 
    {
        UIView * bck = [[UIView alloc] init];
        [bck setBackgroundColor:[UIColor whiteColor]];
        self.tableView.backgroundView = bck;
        [bck release];
    }

    return self;
}

编辑:

我已经确定了问题:

我上课了

AccountsListViewController_iPad

的子类
AccountsListViewController : UITableViewController

AccountsListViewController有它的tableView& init之后加载的视图(正如我所料)。另一方面,AccountsListViewController_iPad的视图和tableView等于nil。我已从AccountsListViewController_iPad中删除了所有内容,所以它现在看起来如下:

.h
#import <UIKit/UIKit.h>
#import "AccountsListViewController.h"
@interface AccountsListViewController_iPad : AccountsListViewController
@end

.m
#import "AccountsListViewController_iPad.h"
@implementation AccountsListViewController_iPad
@end

而且它的观点仍然是零。在我看来,它的行为应该与它的超类完全相同,但事实并非如此。

2 个答案:

答案 0 :(得分:3)

我怀疑这是因为在加载视图之前表视图没有加载。您应该将视图设置移动到viewDidLoad

您应该在init方法中设置的唯一“查看”属性是.navigationItem(尽管我认为UINavigationItem可能最好被视为控制器的一部分而不是视图。)

答案 1 :(得分:2)

好吧,我已经解决了这个问题:

有AccountsListViewController_iPad类和关联的AccountsListViewController_iPad.xib文件。尽管没有在xib中的任何地方加载Xib而不是AccountsListViewController_iPad,但仍在加载Xib。出于某种原因,xib中的表视图被设置为文件所有者中的属性“table”(它不存在),因此view和tableView都是nil。

我仍然不知道为什么xib被加载或为什么它存在问题发生在iOS 5.x