0

我有一个 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!");
}
4

1 回答 1

3

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

解决这个问题也解决了所有其他问题。

谢谢你的帮助!

于 2013-04-15T12:26:23.023 回答