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