2

我有一个简单的 Cocoa 应用程序。它有两个窗口,每个窗口都在一个单独的 xib 文件中:

  • 主菜单.xib
  • 辅助窗口.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...]

4

2 回答 2

1

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

于 2012-07-24T12:56:05.550 回答
1

您是否将辅助窗口的 .xib 中的 File's Owner 类型设置为您的应用程序委托的类型?然后您是否将该 .xib 中的窗口连接到secondaryWindowFile's Owner 的插座?

如果您做了这些事情,并且 .xib 正确包含在项目中,并且您在+loadNibNamed:owner:消息中正确指定了文件名,那么secondaryWindow应该填充您的属性。

于 2012-07-24T15:00:44.053 回答