私のコードは、MenuController.m と AppController.m の 2 つの主要な実装に分割され、それぞれにヘッダー ファイルがあります。
NSUserDefaults を使用して保存され、NSMenuItems を介して変更されたユーザー設定がいくつかあり、有効にするとチェック マークが表示されます ( setState: NSOffStateを使用)。設定に欠けている部分が 1 つだけあります。設定でオプションがオンになっている場合、起動時にこれらのメニュー項目のsetStateをアプリに設定する必要があります。ただし、アプリの起動時に何かを設定する唯一の方法は、それをawakeFromNibメソッドに含めることです。これは AppController にあり、MenuController でインスタンス化されたNSMenuItemにアクセスできません。
私はObjective-Cを初めて使用し、このサイトの多くの役立つチュートリアルと回答のおかげでここまでたどり着きましたが、今は困惑しています.
クラスとオブジェクトのメソッドを使用して設定を変更しようとしましたが、失敗しました。NSMenuItems の既存のインスタンスを使用する必要があります。 validateMenuItemは有望に見えましたが、メニューを有効または無効にするだけで、setState は行いません。
関連コード(私は思う):
MenuController.h から:
@interface MenuController : NSMenu {
IBOutlet NSMenu *optionsMenu;
IBOutlet NSMenuItem *onTopItem;
IBOutlet NSMenuItem *liveIconItem;
}
- (IBAction)menuLiveIconToggle:(id)pid;
MenuController.m から: (prefs と setState を変更する方法 - うまくいきます)
- (IBAction)menuLiveIconToggle:(id)pid; {
//NSLog(@"Live Icon Toggle");
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if ([standardUserDefaults boolForKey:@"LiveIcon"] == TRUE){
[standardUserDefaults setBool:FALSE forKey:@"LiveIcon"];
[liveIconItem setState: NSOffState];
} else {
[standardUserDefaults setBool:TRUE forKey:@"LiveIcon"];
[liveIconItem setState: NSOnState];
}
[standardUserDefaults synchronize];
}
AppController.m から: (動作しませんが、これが要点です)
- (void) awakeFromNib{
// Update menu items
if ([standardUserDefaults boolForKey:@"LiveIcon"] == TRUE) {
[liveIconItem setState: NSOnState];
} else {
[liveIconItem setState: NSOffState];
}
}
助けてくれてありがとう!