OSX/Cocoa问题:创建状态栏项目困难(苹果指南不适用于我)

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

我创建并运行了程序,但没有看到新的状态栏项。为什么呢?如果我是个无知的新手,请谅解。我认为我可能忽略了一些基本的东西。

也许你的状态栏已满,NSStatusBar 无法为你的菜单项找到空间。检查它是否为 nil,因为通常它会这样做,如果找不到空间。 - CodaFi
2个回答

5

addItemWithTitlekeyEquivalent参数不能为nil。如果为nil,则会引发异常,代码无法继续执行。将这两行代码更改为以下内容:

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

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

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


没错!而且,如果你不想设置一个键盘快捷键,只需提供一个空字符串 @"";如果你想使用 Command-A,则使用 @"a"(而不是 @"A")。 - user1804762

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接