Состояние загрузки UISwitch из NSUserDefaults


Мне удалось изменить состояние моего UISwitch и сохранить в NSUserDefaults.

Мой UISwitch вид отличается от основного вида, и когда я переключаюсь между видами, моя кнопка UISwitch всегда появляется, даже если состояние может быть выключено.

- (IBAction)truthonoff:(id)sender {
    if(_truthonoff.on) {
        // lights on

        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:@"yes" forKey:@"truthonoff"];
        [defaults synchronize];

        self.status.text = @"on";
    }

    else {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:@"no" forKey:@"truthonoff"];
        [defaults synchronize];

        self.status.text =@"off";
    }
}

И вот как я загружаю кнопку во втором контроллере вида:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
self.text.text=[defaults objectForKey:@"truthonoff"];

Как я могу гарантировать, что состояние UISwitch представляет значение в NSUserDefaults (т. е. когда оно выключено, оно отображается как выключено, а когда включено - как включено)?

3 2

3 ответа:

Попробуйте это:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[self.valueSwitch setOn:[[defaults objectForKey:@"truthonoff"] boolValue] animated:YES];
[self.valueSwitch addTarget:self action:@selector(stateSwitched:) forControlEvents:UIControlEventValueChanged];

В stateSwitched Сделайте так:

-(void)stateSwitched:(id)sender {
    UISwitch *tswitch = (UISwitch *)sender;
    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
    [defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
    [defaults synchronize];
}

Надеюсь, это поможет .. :)

Немного поздно, но вместо того, чтобы сделать так, как вы приняли ответ:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
[defaults synchronize];

Правильный путь был бы:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setBool:tswitch.isOn forKey:@"truthonoff"];
[defaults synchronize];

Это избавит вас от проверки значения логического, так как NSUserDefaults может принимать значение boolean.

Также было бы проще получить логическое выражение:

bool truthonoff = [defaults boolForKey:@"truthonoff"];

Почитайте еще на boolForKey

Соедините ваш ваш UISwitch с IBOutlet в вашем ViewController.
Вы можете (un-)установить переключатель с помощью:

[mySwitch setOn:TRUE animated:TRUE];

Ссылка На Метод