1

私はObj-C/Cocoaプログラミングに不慣れで、メニュー項目をNSMenuインスタンスに動的に追加しようとして問題が発生し、挿入時に項目アクションセレクターがすでに設定されています。

動的メニュー項目をうまく追加できますが、メニューから項目をクリックしてもアクションセレクターはトリガーされません。

以下の最初の行は、メニュー項目を追加するために使用しているコード行です。action:(SEL)aSelectorを「openEchowavesURL」関数に設定するように設定できます。

この関数は同じコントローラークラスファイルにあり、以下に関数定義を含めました。

間違ったセレクター構文または何かを呼び出しているだけですか?または、クリックしたときにメニュー項目がセレクターを呼び出すようにするための秘訣は何ですか?


[statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];

- (void)openEchowavesURL:(id)sender {
    // function details here
}
4

2 に答える 2

11

オブジェクトに対してアクションをトリガーする場合は、新しいNSMenuItemのターゲットを指定する必要があります。

NSMenuItem *item = [statusMenu insertItemWithTitle:[NSString stringWithFormat:@"%d - %@", convo.newMessagesCount, convo.ewName] action:@selector(openEchowavesURL:) keyEquivalent:@"" atIndex:0];
[item setTarget:self]; // or whatever target you want

そうしないと、オブジェクトがセレクターに応答するまで、 NSResponderチェーンがウォークされます。

于 2009-12-28T16:17:33.693 に答える
1

アクションにはターゲットが必要です。そうしないと、アクションは nil に送信され、新しいルールが適用されます。

于 2009-12-28T16:08:26.673 に答える