2016-03-10 19 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