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

私は構築し、実行します。表示される新しいステータス バー項目はありません。なぜだめですか?私が無知な初心者であるならば、私を許してください。私は何か基本的なことを見落としていると思います。

4

2 に答える 2

5

keyEquivalentnilにaddItemWithTitleすることはできません。そうすると、例外が発生するため、それらの行を超えることはありません。この 2 行を次のように変更します。

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

そして、すべてがうまくいきます。この種の問題は、デバッガーの出力を確認することでトラブルシューティングできます。この場合、正しい手がかりを与えた出力は「無効なパラメーターが満たされていません: charCode != nil」でした。

NSMenu'sドキュメントからさらに多くを得ることができます:

メニュー項目に相当するキーとして使用するキーを識別する文字列。メニュー項目に同等のキーを持たせたくない場合、keyEquiv は nil ではなく、空の文字列 (@"") にする必要があります。

于 2013-03-17T23:07:45.597 に答える
0

それが根本的なものであることを知っていました。最初にチェックすべきだった。- (void)applicationDidFinishLaunching:(NSNotification *)aNotification呼ばれていませんでした。今修正しました。

于 2013-03-17T23:33:25.583 に答える