내 코드는 두 개의 주요 구현으로 나뉩니다. MenuController.m과 AppController.m, 각각 헤더 파일이 있습니다.AppController에서 MenuController의 NSMenuItem 상태를 변경 하시겠습니까?
NSUserDefaults를 사용하여 저장하고 NSMenuItems를 통해 저장된 두 개의 사용자 기본 설정을 사용합니다 (setState : NSOffState 사용). 내 설정의 단 한 가지 누락 된 비트가 있습니다 - 옵션이 환경 설정에있는 경우 시작시 해당 메뉴 항목에 대해 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에서는 :
- (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];
}
(방법의 환경 설정을 변경하고 setState- 잘 작동) AppController.m에서 : (작동하지 않습니다, 그러나 그것의 요지입니다)
- (void) awakeFromNib{
// Update menu items
if ([standardUserDefaults boolForKey:@"LiveIcon"] == TRUE) {
[liveIconItem setState: NSOnState];
} else {
[liveIconItem setState: NSOffState];
}
}
도움 주셔서 감사합니다!
와우 감사합니다! 첫 번째 방법은 현재 작업중인 코드에서 최소한의 변경으로 사용했습니다. awakeFromNib가 어떤 * nib 객체 (* 오)에있을 수 없다는 것은 나에게 전혀 발생하지 않았습니다. 여기에서 나는 어려운 길을 돌아 다니고 있었다. .. 고맙습니다. – shrakner