2016-03-10 2 views
1

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

 NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

    self->switch1.on = ([[standardDefaults stringForKey:@"switchKey"] 

          isEqualToString:@"On"]) ? (YES) : (NO); 

Как вы можете видеть, я добавил в label.text = @ «OFF», когда переключатель выключен, но тем не менее он по-прежнему не меняется.

- (IBAction)switchChanged:(UISwitch *)sender { 

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults]; 

if (sender.on == 0) { 

    label.text = @"OFF"; 
    [standardDefaults setObject:@"Off" forKey:@"switchKey"]; 


} else if (sender.on == 1) { 

    label.text = @"ON"; 
    [standardDefaults setObject:@"On" forKey:@"switchKey"]; 


} 

[standardDefaults synchronize]; 

} 

Прежде чем я захочу сохранить состояние переключателя, я просто использовал это.

-(IBAction) alarmSettings1{ 

if (switch1.on) 

{ label.text = @"ON";} 


else { label.text = @"OFF";} 

} 

Я знаю, что я просто делаю что-то не так, но не могу понять, что.

+0

Почему вы используете stringForKey? вместо этого использовать ObjectForKey? –

+0

Ваши розетки подключены? –

+0

@DianaProdan да, они – avi

ответ

0

Вы должны установить логическое значение следующим образом:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"switchKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Итак, если вы хотите установить состояние коммутатора, вы могли бы сделать:

BOOL switchState = [[NSUserDefaults standardUserDefaults] objectForKey:@"switchKey"]; 
self.switch1.on = switchState; 

Кроме того, в методе IBAction, прочитайте в таком состоянии:

- (IBAction)switchChanged:(UISwitch *)sender { 
    label.text = sender.on ? @"ON" : @"OFF"; 
    [[NSUserDefaults standardUserDefaults] setBool:sender.on forKey:@"switchKey"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+0

Да, переключатель действительно сохраняет состояние, однако метка не изменяется. – avi

+0

Правильно ли подключены ваши розетки? Возможно, вам придется проверить, что вы можете вообще изменить состояние метки. Если это так, нужно выяснить, как вы хотите подключиться к нему. – dokun1

+0

switch1 подключен к коммутатору, switchChanged подключен как touchupinside к коммутатору и метка подключена к этикетке. однако он все еще не сохраняет состояние. также self.switch.on = switchState; должен быть изменен на self-> switch1.on = switchState, чтобы фактически работать, в противном случае возникает ошибка – avi

Смежные вопросы