我在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
而且它的观点仍然是零。在我看来,它的行为应该与它的超类完全相同,但事实并非如此。
答案 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
下