Objective c OSX/Cocoa创建状态栏项时出现问题(Apple指南不适用于我)

Objective c OSX/Cocoa创建状态栏项时出现问题(Apple指南不适用于我),objective-c,cocoa,nsstatusitem,Objective C,Cocoa,Nsstatusitem,我相信我正确地遵循了这个例子。() 我建立和运行。没有要查看的新状态栏项。为什么不呢?如果我是个无知的新手,请原谅我。我想我忽略了一些基本的东西 addItemWithTitle的keyEquivalent不能为零。当您这样做时,会发生异常,因此它永远不会通过这些行。用如下方式更改这两行: [testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"]; [testMenu addItemWithTitle:@"Anoth

我相信我正确地遵循了这个例子。()


我建立和运行。没有要查看的新状态栏项。为什么不呢?如果我是个无知的新手,请原谅我。我想我忽略了一些基本的东西

addItemWithTitle
keyEquivalent
不能为零。当您这样做时,会发生异常,因此它永远不会通过这些行。用如下方式更改这两行:

[testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"];
[testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:@"i"];
现在一切都很好。您可以通过查看调试器的输出来解决此类问题。在本例中,给出正确线索的输出是“无效参数不满足:charCode!=nil”

您可以从以下方面获得更多信息:

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


我知道这是一件基本的事情。应该是我检查的第一件事<代码>-(void)ApplicationIDFinishLaunching:(NSNotification*)未调用通知。现已修复。

可能您的状态栏已满,而NSStatusBar无法为您的菜单项找到空间。检查它是否为零,因为如果它找不到空间,它通常会这样做。这是真的!另外,如果你不想有一个密钥等价物,只需提供一个空字符串@“”,如果你想要命令a,则使用@“a”(而不是@“a”)。
@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];
}
[testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"];
[testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:@"i"];