1

我有一个从首选项窗口切换 NSStatusItem 的应用程序。首选项窗口有一个复选框“启用/禁用”,它调用 NSStatusItem 类中的“启用状态项目”和“禁用状态项目”方法。

这一切都很好,我的问题是向这个 NSStatusItem 添加一个菜单。NSStatusItem 类中的代码如下所示:

-(void)enableStatusItem
{
    //get icon
    theIcon = [NSImage imageNamed:@"test.png"];

    //create item
    statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
    [statusItem setImage:theIcon];
    [statusItem setHighlightMode:YES];
    [statusItem setMenu:statusMenu];
}

-(void)disableStatusItem
{
    [[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
}

一切正常,除了 setMenu。起初我在 awakeFromNib 中加载了 StatusItem,然后 setMenu 起作用了。但是当首选项复选框“关闭”时,StatusItem 必须保持关闭,所以我无法再将它加载到 awakeFromNib 中。

我怀疑 setMenu 没有加载,因为它不在 awakeFromNib 中,但是在 awakeFromNib 之后调用了“enableStatusItem”,所以在 awakeFromNib 中还没有要添加菜单的 statusItem。而且我无法“预加载”statusItem,因为它是使用“[[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];”创建的

到目前为止,我已经尝试了很多,甚至制作了一个测试应用程序,我在其中一个接一个地添加了每一段代码,所以我可以分解它。但到目前为止没有任何成功。

我觉得因为就是这么简单的东西,只有一个小NSMenu,那难道没有简单的解决方案吗?

也许你们中的一个人有一个想法?

提前感谢您的时间,问候弗兰斯

4

1 回答 1

1

该代码没问题,您的问题是菜单未保留

assert(statusMenu);
于 2012-12-16T16:51:42.110 回答