2016-03-10 20 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;必须更改为自我> switch1.on = switchState实际工作,否则会出现错误 – avi