2011-05-31 55 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

相關問題