3

我相信我正确地遵循了这个例子。(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/StatusBar/Tasks/creatingitems.html

@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSStatusItem *testItem;
NSMenu *testMenu;
}

...

@implementation AppDelegate


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    testMenu = [[NSMenu alloc] init];
    [testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:nil];
    [testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:nil];

    NSStatusBar *bar = [NSStatusBar systemStatusBar];

    testItem = [[NSStatusItem alloc] init];
    testItem = [bar statusItemWithLength:NSVariableStatusItemLength];
    [testItem setTitle: @"X"];
    [testItem setHighlightMode:YES];
    [testItem setMenu:testMenu];
    [testItem setEnabled:YES];
}

我构建并运行。看不到新的状态栏项目。为什么不?如果我是一个无知的新手,请原谅我。我假设我忽略了一些基本的东西。

4

2 回答 2

5

keyEquivalent因为addItemWithTitle不能为零。当您这样做时,会发生异常,因此它永远不会超过这些行。用这样的东西改变这两行:

[testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"];
[testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:@"i"];

现在一切正常。您可以通过查看调试器的输出来解决此类问题。在这种情况下,给出正确线索的输出是“无效参数不满足:charCode!= nil”。

您可以从NSMenu's文档中获得更多信息:

一个字符串,标识用作菜单项的等效键的键。如果您不希望菜单项具有等效键,则 keyEquiv 应为空字符串 (@"") 而不是 nil。

于 2013-03-17T23:07:45.597 回答
0

我知道这是基本的东西。应该是我检查的第一件事。- (void)applicationDidFinishLaunching:(NSNotification *)aNotification没有被调用。现在修好了。

于 2013-03-17T23:33:25.583 回答