为什么NSStatusItem会多次显示?

时间:2013-12-11 23:07:03

标签: macos cocoa duplicates nsstatusitem awakefromnib

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];
}

1 个答案:

答案 0 :(得分:0)

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

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

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