多个UISwitch状态未从模态屏幕保存到NSUserDefaults

时间:2014-05-01 09:15:00

标签: ios nsuserdefaults uiswitch

我的应用程序中有一个带有UISwitch元素(清单)的故事板,我试图存储开关状态,以便用户检查几个项目然后离开页面(模态)或关闭使用Home键的应用程序,会记住UISwitch元素的状态,用户可以继续检查清单。

如果读取了某个项目并关闭UISwitch,则字体变为红色,否则UISwitch开启且字体为白色。

一切似乎都有用(仍在学习OOP和Xcode 5),除非我退出页面(保留模态)然后返回UISwitch元素全部再次打开。如果我停止模拟器(或IPAD)并在我到达页面时重新启动应用程序,则所有UISwitch再次打开,而不是选择关闭。

如果我使用“主页”按钮并返回应用程序,则UISwitch元素仍处于剩余状态。

在.m文件中,这里只有一个开关的viewDidLoad方法:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.

NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
self.SwitchFlipChart.on = ([[standardDefaults stringForKey:@"Switch1"] isEqualToString:@"On"]) ? (YES) : (NO);
}

及以下是同一IBAction元素

UISwitch方法
- (IBAction)SwitchFlipchart:(UISwitch *)sender{

if (SwitchFlipchart.on) {

LabelFlipchart.textColor = [UIColor whiteColor];

} else {

LabelFlipchart.textColor = [UIColor redColor];

}
SwitchFlipchart.hidden = YES;


NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if (sender.tag == 0) {
if (sender.on == 0) {
[standardDefaults setObject:@"Off" forKey:@"Switch1"];
} else if (sender.on == 1) {
[standardDefaults setObject:@"On" forKey:@"Switch1"];  //removed f from fSwitch1
}
}

[standardDefaults synchronize];

}

我是否正确使用NSUserDefaults或者是因为我在停止模拟器时重新加载页面或者模式化页面?

使用NSUserDefaults和多个UISwitch元素是否有更好的(有时更简单,更好)方式?

在以模态方式离开页面后加载页面时,有更好的方法可以保留UISwitch元素状态吗?

是否有更好的方式来存储UISwitch状态而不是NSUserDefaults

1 个答案:

答案 0 :(得分:0)

用此

替换您的代码
- (IBAction)SwitchFlipchart:(UISwitch *)sender{

if (SwitchFlipchart.on) {

    LabelFlipchart.textColor = [UIColor whiteColor];

} else {

    LabelFlipchart.textColor = [UIColor redColor];

}
SwitchFlipchart.hidden = YES;


NSUserDefaults *standardDefaults = [NSUserDefaults standardUserDefaults];
if (sender.tag == 0) {
    if (sender.on == 0) {
        [standardDefaults setObject:@"Off" forKey:@"Switch1"];
    } else if (sender.on == 1) {
        [standardDefaults setObject:@"On" forKey:@"Switch1"];
    }
}

 [standardDefaults synchronize];

}

解释: - 您正在设置错误的密钥。对于这两种情况,密钥应该与Switch1相同。但是你正在使用fSwitch1 for On状态。请检查您的代码。