2011-05-31 67 views
5

在我的应用程序中,我推送了一个视图控制器(一个UITableViewController),它也有一个引用UITableViewCell的属性/插座。看来,与创建所述控制器:UIViewController init vs initWithNibName:bundle:

PreferencesController *pController = [[PreferencesController alloc] init];

在XIB文件不创建用于的UITableViewCell对象,因此,出口空,从而表装载生成异常。 我解决了这个有:

PreferencesController *pController = [[PreferencesController alloc] initWithNibName:@"PreferencesController" bundle:nil];

,但我真的不知道为什么它的工作,从文档似乎初始化应足以加载相关笔尖文件(PreferencesController.xib)。

回答

4

似乎有什么神奇的名字PreferencesController。我刚刚有完全相同的问题。将我的类(和xib)重命名为别的东西解决了这个问题。

3

编辑:我是不正确的,如果nib文件的命名方式与控制器的命名方式相同,那么它应该自动加载alloc init

界面生成器中的文件所有者是什么?可以通过更改此值来修改默认行为。

+0

文件对PreferencesController.xib所有者类是PreferencesController和LibraryMenuController.xib是LibraryMenuController ..
的一点是,在文件的所有者不是由视图属性链接的厦门国际银行的对象不加载init方法,但initWithNibName是需要的。 – Fr4ncis 2011-05-31 14:47:16

1

您必须覆盖initWithNibName:bundle:而不是init,因为这是“指定的初始化程序”。从Nib文件加载时,这是正在调用的创建者消息。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Custom initialization 
    } 
    return self; 
} 

资源

+0

为什么downvote? – 2013-03-04 17:07:38