2010-11-11 95 views
4

我正面臨着這個奇怪的問題,我不確定哪裏出錯了。視圖控制器調用awakeFromNib兩次

現狀:

我有一個MainWindowController類將加載到顯示正確的碎粒。 我創建了一個對象,並將其更改爲IB中的MainWindowController類,並將它放在「MainWindowView」nib中。

所以基本上筆尖「MainWindowView」具有自定義視圖和上側的幾個按鈕,使得用戶可以選擇哪個視圖加載和它會加載其它各個筆尖。我在IB中啓動時隱藏了mainmenu,因此它只會將MainWindowView加載到其他nib文件中。

但是在調試,當我把一個NSLog的上MainWindowController的awakeFromNib,我看到在控制檯它被稱爲兩次。

在我的項目

,我有一個startupController類連同MainMenu.xib用下面的代碼。

startUpController.h:

#import <Cocoa/Cocoa.h> 
#import "MainWindowController.h" 

@interface startupController : NSObject { 
MainWindowController *myWindowController; 
} 
@end 

startUpController.m:

#import "startupController.h" 
@implementation startupController 
-(void)awakeFromNib { 
[super init]; 
if(myWindowController == nil) 
myWindowController = [[MainWindowController alloc] initWithWindowNibName:@"MainWindowView"]; 
[myWindowController showWindow:self]; 
} 
@end 

任何幫助表示讚賞。謝謝。

回答

7

這聽起來像你正在創建兩個MainWindowController對象,所以awakeFromNib將爲每個調用一次。

你awakeFromNib在startupContoller方法是創建一個MainWindowController對象,並與MainWindowView筆尖對其進行初始化。如果您還向該筆尖添加了一個對象並將其類型設置爲MainWindowController,則將在加載該筆尖時創建另一個MainWindowController對象。

您應該刪除從MainWindowView筆尖MainWindowController對象,而是設置文件的所有者對象的類型MainWindowController。 (MainWindowController應該是NSWindowController的子類)任何連接到你創建的對象的連接都應該連接到文件的所有者。

另外,你不應該在awakeFromNib中調用[super init]。你只應該在init方法中調用[super init]。

+0

非常感謝泰勒,幫助刪除了MainWindowController對象。我不知道我可以使用文件所有者進行連接,因此我創建了該對象。謝謝! – han 2010-11-12 00:47:23

相關問題