NSWindowController无法第二次打开NSWindow

时间:2013-04-13 11:57:32

标签: objective-c nswindowcontroller

我有一个NSWindowController子类,BBPreferencesWindowController

@implementation BBPreferencesWindowController

- (NSString *)windowNibName
{
    return @"PreferencesWindow";
}

...

我的AppDelegate中的一个函数可以通过此控制器打开“PreferencesWindow.xib”中的窗口。

此函数从NSMenuItem调用,附加到系统菜单栏中NSStatusItem项下的NSMenu。

@property (strong) BBPreferencesWindowController *preferencesWindow;

...

- (void)openPreferences
{
    if (self.preferencesWindow == nil)
    {
        self.preferencesWindow = [[BBPreferencesWindowController alloc] init];
    }

    [self.preferencesWindow showWindow:self];
    NSLog(@"%@", self.preferencesWindow.window.isVisible ? @"YES" : @"NO");
}

第一次单击NSMenuItem时窗口显示正常(虽然NSLog行记录“NO”),但是当我关闭窗口然后再次通过单击NSMenuItem重新打开它时,窗口无法打开。

我错过了什么?

谢谢!

修改 BBPreferencesWindowController没有自定义init方法。它确实有一个自定义awakeFromNib(第一次调用)

- (void)awakeFromNib
{
    [super awakeFromNib];
    NSLog(@"Loaded!");
}

1 个答案:

答案 0 :(得分:3)

我找到了BBPreferencesWindowController没有很好地管理窗口的原因:在XIB中,文件所有者window出口没有正确链接。

修复此问题也解决了所有其他问题。

感谢您的帮助!