OSX/Cocoa问题创建状态栏项目(Apple指南不适合我)

Oli*_*ver 3 cocoa objective-c nsstatusitem

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

@interface AppDelegate : NSObject <NSApplicationDelegate> {
NSStatusItem *testItem;
NSMenu *testMenu;
}
Run Code Online (Sandbox Code Playgroud)

...

@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];
}
Run Code Online (Sandbox Code Playgroud)

我建立并运行.没有新的状态栏项目可供查看.为什么不?如果我是一个无知的新手,请原谅我.我认为我忽略了一些基本的东西.

vcs*_*nes 5

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

[testMenu addItemWithTitle:@"An Item" action:nil keyEquivalent:@"a"];
[testMenu addItemWithTitle:@"Another Item" action:nil keyEquivalent:@"i"];
Run Code Online (Sandbox Code Playgroud)

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

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

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