Состояние загрузки 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 ответа:
Попробуйте это:
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