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

时间:2013-03-17 22:55:14

标签: objective-c cocoa nsstatusitem

我相信我正确地遵循了这个例子。 (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];
}

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

2 个答案:

答案 0 :(得分:5)

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

addItemWithTitle

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

您可以从NSMenu's documentation获得更多信息:

  

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

答案 1 :(得分:0)

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