【问题标题】:Multiple UISwitch states not saved to NSUserDefaults from modal screen多个 UISwitch 状态未从模态屏幕保存到 NSUserDefaults
【发布时间】:2014-05-01 09:15:00
【问题描述】:

我的应用程序中有一个带有 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);
}

以下是相同UISwitch元素的IBAction方法

- (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 元素状态?

有没有比NSUserDefaults 更好的存储UISwitch 状态的方法?

【问题讨论】:

    标签: ios nsuserdefaults uiswitch


    【解决方案1】:

    用这个替换你的代码

    - (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 用于 On 状态。请检查您的代码。

    【讨论】:

    • 我上面发布的代码确实有 1 个错误,但我的应用程序的代码中不存在该错误。我没有剪切和粘贴代码,所以在这里输入时我错过了。!
    • 这并不能解决当应用程序关闭时所选开关变回其默认状态的问题(不是到后台,或者您以模态方式离开页面然后返回页面。当您离开并返回所有开关返回到它们的默认 (ON) 状态,而不是保持它们的位置。
    • @yser3562325 好的,把你的代码发给我,我会解决的。这是我的邮件地址 rahul.vyas.09@gmail.com
    • Rahul。感谢您愿意查看代码,我会将您找到的内容发回此处,以便其他人得到他们需要的答案。我坚信传递我们所知道的知识来帮助别人。再次感谢您!
    猜你喜欢
    • 2011-05-13
    • 2014-04-30
    • 2013-11-08
    • 1970-01-01
    • 2016-07-24
    • 2014-05-31
    • 2018-10-25
    • 2011-10-03
    • 2013-10-17
    相关资源
    最近更新 更多