ここで非常に奇妙な問題があります。FinderSync 拡張機能を作成しています。具体的には、コンテキスト メニューに要素を追加しています。すべてを 1 つのクラスにまとめると、問題なく動作します。
1) FinderSync と呼ばれるメイン拡張クラスがあります。
2)このクラスでは、実装します
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
3)このメソッドでは、(とりわけ)書いています:
NSMenuItem *myItem = [[NSMenuItem alloc]
initWithTitle:@"myTitle"
action:@selector(myAction:)
keyEquivalent:@""];
4) FinderSync クラスには、メソッドが存在します。
- (IBAction)myAction:(id)sender;
5) ユーザーがメニュー項目をクリックすると、このメソッドが期待どおりに呼び出されます。
現在:コンテキスト メニュー機能を ContextMenuHandler という別のクラスに外注しようとしています。現在の状況:
1) FinderSync と呼ばれるメイン拡張クラスと、ContextMenuHandler と呼ばれる別のクラスがあります。FinderSync は ContextMenuHandler のインスタンスを作成し、それへの参照 (_contextMenuHandler) を保持します。
2) 両方のクラスが実装
- (NSMenu *)menuForMenuKind:(FIMenuKind)whichMenu
3) menuForMenuKind の FinderSync 実装は、呼び出すだけです。
return [_contextMenuHandler menuForMenuKind:whichMenu];
4) ContextMenuHandler は NSMenuItem を作成します。(まったく同じコード)。私も追加しようとしました:
[myItem setTarget:self];
[myItem setAction:@selector(myAction:)];
どちらのクラスも myAction を実装しています。
5)想定:メニュー項目をクリックすると、ContextMenuHandler の myAction が呼び出されます観察: FinderSync の myAction が呼び出されます...
また、更新後にファインダーを再起動しており、ContextMenuHandler のブレークポイントが正しくヒットしているため、「古い FinderSync バージョンの実行」の問題ではないようです。
この奇妙な動作の説明 (または修正) はありますか?