2012-07-24 19 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属性。

相关问题