setState не обновляет вид флажка

Я пытаюсь создать окно настроек.
В нем у меня есть несколько NSButtons в стиле флажков. Проблема в том, что они не обновляются, когда я вызываю метод setState:. Я обращаюсь к standarUserDefaults, когда тогда окно инициализируется, чтобы получить состояние, в котором они должны быть, и планировал изменить их в зависимости от того, в каком состоянии находится этот ключ.

Я знаю, что они на самом деле подключены как к их IBOutlet, так и к IBAction, так как я попробовал NSLog-ing, чтобы убедиться в этом.

Я что-то читал о том, что изменение значения свойства модели программно не отражается в пользовательском интерфейсе здесь, но я не уверен, что это проблема или, честно говоря, на что они там ссылаются.

Я объявил флажки в файле .h следующим образом:

IBOutlet NSButton *defaultDateCheck;
IBOutlet NSButton *closeOnCreationCheck;
IBOutlet NSButton *allowEmptyNumberCheck;
IBOutlet NSPopUpButton *defaultJobSetting;

Метод инициализации выглядит следующим образом:

-(id)initWithWindowNibName:(NSString *)windowNibName{

    self = [super initWithWindowNibName:windowNibName];

    if (self) {

        NSUserDefaults *myDefaults = [NSUserDefaults standardUserDefaults];

        [defaultDateCheck setState:[myDefaults boolForKey:@"useDefaultDate"]];

        [closeOnCreationCheck setState:[myDefaults boolForKey:@"closeOnCreation"]];

        [allowEmptyNumberCheck setState:[myDefaults boolForKey:@"allowEmptyProjectNumber"]];

        [defaultJobSetting selectItemAtIndex:[myDefaults integerForKey:@"defaultJob"]];
    }
    return self;
}

Я также пробовал следующий формат для установки флажков, но безрезультатно:

if ([myDefaults integerForKey:@"useDefaultDate"] == YES) {
    [defaultDateCheck setState:NSOnState];
}
else {
    [defaultDateCheck setState:NSOffState];
}

Подключенные методы IBAction для флажков выглядят так:

-(IBAction)toggleCloseOnCreation:(id)sender{
    [[NSUserDefaults standardUserDefaults] setBool:([closeOnCreationCheck state] == NSOnState) forKey:@"closeOnCreation"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

person Bjorninn    schedule 04.04.2012    source источник


Ответы (2)


Установите состояние в методе -viewDidLoad, поскольку в -init представление и его подпредставления еще не существуют.

person Eugene    schedule 04.04.2012

При установке значения по умолчанию используйте:

[myDefaults setObject:[NSNumber numberWithBool:YES] forKey:@"YourKey"];

При проверке, является ли значение истинным или ложным, используйте:

[[[NSUserDefaults standardUserDefaults] objectForKey:@"YourKey"] boolValue]
person Elbimio    schedule 05.04.2012