一个应用程序代表,两个Windows

时间:2012-07-24 12:51:43

标签: objective-c macos cocoa interface-builder

我有一个简单的Cocoa应用程序。它有两个窗口,每个窗口都在一个单独的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总是(null)

我在SecondaryWindow.xib连接中添加了第二个窗口到AppDelegate插座的插座。在SecondaryWindow.xib中还需要做什么才能完成连接?

编辑:添加[NSBundle loadNibNamed ...]

2 个答案:

答案 0 :(得分:1)

你需要加载它...... 默认情况下,MainWindow.xib由框架加载,框架创建自己的app delegate实例。 您应该从应用程序委托中加载第二个窗口(尝试[NSBundle laodNibNamed:@"SecondaryWindow" owner:self]。当您这样做时,文件的所有者将是应用程序委托 - 在界面构建器中更改文件所有者的类以反映这一点并建立您的连接它)

答案 1 :(得分:1)

您是否在辅助窗口的.xib中将文件所有者的类型设置为应用代理的类型?你是否然后将.xib中的窗口连接到文件所有者的secondaryWindow出口?

如果您执行了这些操作,并且.xib已正确包含在项目中并且您已在+loadNibNamed:owner:消息中正确指定了文件名,则您的secondaryWindow属性应为填充。