0

一个 NSStatusItem 附加了一个 NSMenu,并且 NSMenu 的按钮之一打开了一个 NSWindow。每当单击其中一个按钮时,窗口都会按预期打开并正常工作,但会打开另一个 NSStatusItem 显示。

NSStatusItem 是一个时钟,所以我可以看到它正在正确更新。但是,克隆的 NSStatusItem 没有自己的菜单。如果我按下使窗口更多次的按钮,则会弹出更多 NSStatusItem 的克隆版本。

除了这个,一切都很好。

这不是很多信息,但我想不出其他任何东西可以帮助你。我很乐意提供更多信息或尝试一些东西。

编辑:每次单击按钮时,都会以某种方式调用 awakeFromNib,这就是为什么会发生另一个半工作 NSStatusItem 的原因。

编辑:临时解决方法是将 awakeFromNib 方法放在dispatch_once.

编辑:添加了单击按钮时触发的方法,如@zpasternack 所建议的那样

- (IBAction)preferences:(id)sender {
    self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];
    [[self windowController] showWindow:self];
}
4

1 回答 1

0

NSStatusItem 是否包含在 PreferencesWindow 笔尖中?这可以解释它,因为每次单击按钮时您都会加载笔尖。

另外,每次单击按钮时是否需要重新创建该窗口?也许你只能第一次做?

- (IBAction)preferences:(id)sender {
    if( self.windowController == nil ) {
        self.windowController = [[NSWindowController alloc] initWithWindowNibName:@"PreferencesWindow"];
    }
    [[self windowController] showWindow:self];
}
于 2013-12-12T22:33:35.730 回答