Мой код разделен на две основные реализации: MenuController.m и AppController.m, каждый с файлами заголовков.Изменить состояние NSMenuItem в MenuController из AppController?
У меня есть пара пользовательских предпочтений, которые сохраняются с помощью NSUserDefaults, и изменены с помощью NSMenuItems так, что они показывают, флажков, когда включен (используя SetState: NSOffState). Есть только один недостающий бит моей настройки - мне нужно приложение для setState для этих пунктов меню при запуске, если параметры включены в префиксах. Тем не менее, единственный способ, с помощью которого я могу установить что-то в приложении, - это использовать его в методе awakeFromNib, который находится в AppController, и не может получить доступ к NSMenuItem, созданный в MenuController.
Я довольно новичок в Objective-C, и мне удалось получить это благодаря многим полезным учебным пособиям и ответам на этом сайте, но сейчас я просто в тупике.
Я попытался использовать методы класса и объекта, чтобы изменить настройки, но не удалось - мне нужно использовать существующий экземпляр NSMenuItems. validateMenuItem выглядит многообещающим, но он позволяет включать и отключать меню и не устанавливатьState.
Соответствующий код (я думаю):
из 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];
}
}
Спасибо за любую помощь!
Wow thanks! Я использовал первый способ, так как это наименьшее изменение от моего текущего рабочего кода. Мне никогда не приходило в голову, что awakeFromNib может быть в * любом объекте nib (d'oh). Здесь я обошел тяжелый путь ... Спасибо тебе, ТАК МНОГО. – shrakner