Interface Builder を使用して NSMenu を作成しました。KBAppController.m で定義されている showPreferencesPanel メソッドと呼ばれるメニュー項目の 1 つ:
-(void)showPreferencesPanel {
//something
}
ここで、IB を使用せずにメニューを再構築する必要があります... すべてプログラムで行います。StatusMenu.m はそのすべてを処理するクラスであり、メソッドが別のクラスから呼び出されるように設定する必要があるターゲットがわかりません。
そのクラスのインスタンスを作成できませんでした! メニュー項目はグレー表示されます。
StatusMenu.m
KBAppController *kbAppController = [[KBAppController alloc]init];
NSMenuItem* preferencesItem;
[preferencesItem setTarget:kbAppController];
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
編集: -----------------------------------------------
クラス KBAppController のオブジェクトを使用する更新されたコードを次に示します。良いニュースは、設定メニュー項目が有効になっていることですが、それでも KBAppController.m のメソッドを呼び出しません:(
KBStatusMenu.m
@synthesize kbAppController = _kbAppController;
someMethod {
NSMenuItem* preferencesItem;
preferencesItem = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(showPreferencesPanel) keyEquivalent:@""];
[preferencesItem setTarget:self];
}
- (void)showPreferencesPanel {
NSLog(@"in 1");
[_kbAppController showPreferencesPanel];
}
KBAppController.m
-(void)showPreferencesPanel {
NSLog(@"in 2");
//something
}