2012-09-27 50 views
1

我有一個MainMenu.xib,AppController是它的文件所有者。我添加了-(void)awakeFromNib方法工作正常。現在,在路上awakeFromNib停止調用的一輪固定,我不明白爲什麼。它擁有xib,因此它應該在未存檔時調用。這是怎麼回事?可可 - awakeFromNib不叫

編輯:

好吧,我改名awakeFromNibsomething,並呼籲從init ......奏效。仍然困惑爲什麼awakeFromNib不是。我在那裏也有一個+(void) initialize方法,這可能會搞砸了嗎?

- (id)init { 
    self = [super init]; 
    if (self) { 
     [self something]; 
    } 
    return self; 
} 


-(void)something { 
    NSLog(@"yup"); 
} 

回答

3

在筆尖設置文件所有者的類名是唯一的,所以你可以告訴Xcode中什麼對象的出口和動作來告訴你,所以你可以掛鉤的事情了。它不會影響什麼對象實際上文件的所有者,當應用程序運行和nib加載。

MainMenu nib的文件所有者永遠是應用程序對象,無論您在Xcode的檢查器中爲FO設置了什麼類名稱。將它設置爲任何類名,但NSApplication [1]是錯誤的。

當您運行您的應用程序時,您應該在控制檯中找到有關您試圖連接的AppController的任何插座或操作的錯誤消息。他們無法連接,因爲應用程序對象沒有它們。

將類名更改回nib編輯器,並在MainMenu nib中將您的AppController創建爲自定義對象。


好吧,我改名awakeFromNibsomething,並呼籲從init ......奏效。

這意味着init正在調用,這意味着你正在調用它。這是在筆尖創建它的有效替代方法,但如果它不在筆尖或擁有它,則不應該覆蓋awakeFromNib

您的選擇:使用allocinit繼續創建AppController,或者刪除該代碼並在MainMenu nib中創建它。


[1]:或者,如果你的子類的NSApplication,改變了主要類您的應用程序包的是該子類,該子類的名稱。

+0

呵呵,我似乎記得在主xib幾個月前搞定了自定義對象,我敢打賭我把它刪除了。我試圖調用的代碼檢查首選項以獲取一些數據。現在我認爲把它放在awakeFromNib中實際上是一個錯誤的地方。 – janeh