2012-07-24 20 views
2

我有一個簡單的可可應用程序。它有兩個窗口,每個窗口在一個單獨的XIB文件:一個應用程序代表,兩個窗口

  • MainMenu.xib
  • SecondaryWindow.xib

我有一個AppDelegate類,其具有在MainMenu.xib窗口的引用。我試圖讓它有一個對SecondaryWindow.xib中的窗口的引用。我很困惑如何做到這一點。我做了一個插座,因爲這樣的:

@interface AppDelegate : NSObject <NSApplicationDelegate> 

@property (assign) IBOutlet NSWindow *window; 
@property (assign) IBOutlet NSWindow *secondaryWindow; 

@end 

這裏的實現:

@implementation AppDelegate 

@synthesize window = _window; 
@synthesize secondaryWindow = _secondaryWindow; 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    [NSBundle loadNibNamed:@"SecondaryWindow" owner:self]; 
    NSLog(@"_window = %@", _window); 
    NSLog(@"_secondaryWindow = %@", _secondaryWindow); 
} 

@end 

_secondaryWindow總是(空)

我已經從SecondaryWindow.xib連接增加一個出口第二個窗口到AppDelegate中的插座。在SecondaryWindow.xib中,我還需要做些什麼才能完成連接?

編輯:添加[一個NSBundle loadNibNamed ...]

回答

1

你需要加載它... 默認的MainWindow.xib是由框架,創建自己的應用程序委託的實例加載。 您應該從您的應用程序代理載入您的第二個窗口(嘗試[NSBundle laodNibNamed:@"SecondaryWindow" owner:self]。當您這樣做時,文件的所有者將是應用程序委託 - 更改界面構建器中文件所有者的類以反映並與您建立連接)

+0

感謝馬丁。我添加了[NSBundle loadNibNamed ..],因爲它是最接近我可以在文檔中找到您的建議。我修改了我的問題以表明這一點。但仍然,secondaryWindow是空的...我在loadNibNamed中使用了錯誤的所有者?或者,也許applicationDidFinishLaunching不是正確的方法? – 2012-07-24 13:10:24

+0

剛剛編輯我的答案:) – 2012-07-24 13:26:23

+0

嗨馬丁,我仍然無法找到[[NSBundle mainBundle] loadNibNamed ...]可能是iOS和不是OS X? – 2012-07-24 13:49:11

1

您是否將輔助窗口的.xib中的文件所有者的類型設置爲您的應用程序委託的類型?然後,您是否將該.xib中的窗口連接到文件所有者的secondaryWindow插座?

如果您做了這些事情,並且如果.xib正確包含在項目中,並且您在+loadNibNamed:owner:消息中正確指定了文件的名稱,則應填充secondaryWindow屬性。

相關問題