我的应用程序中有一个带有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
?
答案 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状态。请检查您的代码。