私のコードは2つの主な実装に分割されています:それぞれがヘッダファイルを持つMenuController.mとAppController.m。AppControllerからMenuControllerのNSMenuItem状態を変更しますか?
私は(SETSTATEを使用して:NSOffState)が有効になったときに、彼らはチェックマークが表示されるようにNSUserDefaultsを使用して格納し、NSMenuItems介して変更されているカップルのユーザー設定を、持っています。私のセットアップの欠けているビットが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から:(環境設定を変更する方法と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];
}
}
ありがとうございました!
うわー、ありがとう!最初の方法を使用しました。これは、現在作業中のコードからの変更が最小です。 awakeFromNibが* any * nibオブジェクトに存在することはありませんでした。ここで私は難しい道を回っていた...ありがとうございました。 – shrakner