为什么NSUserDefaults没有保存我的价值观?

时间:2010-04-12 14:23:33

标签: iphone nsuserdefaults

您好我正在尝试使用NSUserDefaults在数据库中保存一些默认值。我可以将值保存在NSUserDefaults中(甚至在NSLog中检查过)。 现在,我需要重新启动应用程序时app delegate中的值。但我在NSUserDefaults中没有得到任何东西。以下是我班级的代码,我在NSUserDefaults中保存了值:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

            [prefs setObject:appDel.dictProfile forKey:@"dict"];
            NSLog(@"%@",[prefs valueForKey:@"dict"]);

以下是来自App Delegagte的代码:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];

NSLog(@"%@",[prefs valueForKey:@"dict"]);

上面的代码总是返回null。 有人可以帮助我吗?

4 个答案:

答案 0 :(得分:202)

如果您通过按主页按钮(在模拟器或设备上)终止您的应用,您的NSUserDefaults将被保存。

如果您通过在Xcode中按“停止”终止您的应用(在模拟器或设备上),您的NSUserDefaults 可能会被保存,但很有可能他们赢了吨。 NSUserDefaults会定期保留所有更改,如果您在保留之前终止该过程,它们就会消失。您可以通过调用强制保存:

[[NSUserDefaults standardUserDefaults] synchronize];



附录:

在iOS4中(此答案最初是在iOS3为公开发布时编写的),按下主页按钮时可能无法保存NSUserDefaults。在[[NSUserDefaults standardUserDefaults] synchronize]中手动调用applicationDidEnterBackground:应确保正确保存NSUserDefaults(这应该是内置行为IMO)。

答案 1 :(得分:11)

这段代码对我来说很好。

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}

答案 2 :(得分:2)

您没有说明您是在设备上运行还是在模拟器中运行,但如果您在模拟器中重新启动应用程序,则从Xcode启动时,所有首选项都将在启动之间重置。只有从模拟器本身重新启动时,才会保留首选项。

答案 3 :(得分:1)

在我的情况下,我正在保存并检索字符串。保存后我同步,然后在另一个线程中重新启动时,它无法正常工作。通过在保存之后和在检索之前同步两者来解决问题。