UIViewController init vs initWithNibName:bundle:
在我的应用程序中,我推一个视图控制器(一个UITableViewController),也有一个属性/sockets引用UITableViewCell。 看来,创build控制器:
PreferencesController *pController = [[PreferencesController alloc] init];
不会为xib文件中的UITableViewCell创build对象,因此出口为空,因此表加载会生成exception。 我解决了这个问题:
PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil];
但我没有真正明白为什么它的工作,从文档看来init应该足以加载相关的nib文件(PreferencesController.xib)。
PreferencesController
这个名字似乎有些神奇。 我刚刚有完全相同的问题。 把我的类(和xib)重命名为别的东西解决了这个问题。
编辑:我是不正确的,如果nib文件被命名为与控制器相同的名称应该与alloc init
自动加载。
界面生成器中的文件所有者是什么? 可以通过更改此值来修改默认行为。
你必须重写initWithNibName:bundle:
而不是init
因为这是“指定的初始化程序”。 从Nib文件加载时,这是正在调用的创build者消息。
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { // Custom initialization } return self; }
资源
- 你可以看到这是在它的父类UIViewController文档中的指定初始值设定项。
- 您可以在Apple的文档中了解有关指定初始值设定项的更多信息
- 一个相关的SO问题 ,我了解到这一点。