在我的应用程序中,我正在推动一个视图控制器(一个UITableViewController),它还有一个引用UITableViewCell的属性/出口。看来用以下方法创建控制器:
PreferencesController *pController = [[PreferencesController alloc] init];
不会在xib文件中为UITableViewCell创建对象,因此出口为空,因此表加载会生成异常。 我解决了这个问题:
PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil];
但我真的不知道为什么它有效,因为从文档中看起来init应该足以加载相关的nib文件(PreferencesController.xib)。
答案 0 :(得分:4)
名称PreferencesController
似乎有些神奇。我刚才遇到了同样的问题。将我的类(和xib)重命名为其他东西可以解决问题。
答案 1 :(得分:3)
编辑:我不正确,如果nib文件的名称与控制器相同,则应自动加载alloc init
。
Interface Builder中的文件所有者是什么?可以通过更改此值来修改默认行为。
答案 2 :(得分:1)
您必须覆盖initWithNibName:bundle:
而不是init
,因为这是“指定的初始化程序”。从Nib文件加载时,这是被调用的创建者消息。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
<强>资源强>