奇怪的NSUserDefaults行为

时间:2010-11-08 00:13:42

标签: iphone nsuserdefaults synchronize

当我的iPhone应用程序正在运行时,我在NSUserDefaults中存储了一些数据(NSStrings)。我正在为一场比赛保存高分。当我双击主页按钮并终止应用程序时,我重新启动应用程序时,我存储在NSUserDefaults中的值通常不存在。 为什么会这样?

我正在使用的代码在所有多任务前操作系统(3.0等)中运行良好。从阅读/搜索网看起来好像在做 [NSUserDefaults standardUserDefaults]同步]; 可以提供帮助。有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:7)

在暂停时从任务栏中杀死应用程序只会向其发送SIGKILL消息;没有正常关机。

如果您正在进行后台操作然后终止应用程序,则可能无法在应用程序终止之前将用户默认值同步(写入磁盘),这通常会在内部计时器上自动发生,但如果您已写入默认值然后在自动同步发生之前事物被暂停,这可以解释这种行为。

把它(如你所知):

 [[NSUserDefaults standardUserDefaults] synchronize];

在应用委托中的-applicationDidEnterBackground处理程序中。这样,即使应用程序在后台死亡或被杀死,您也知道已经写入默认值。

作为一种防御性练习,我通常在每次编写我认为非常重要的状态时显式调用默认对象。

答案 1 :(得分:2)

你在哪里调用-synchronize方法?您是否关注操作系统发送的应用程序委托消息,告知您的应用程序即将发布?

答案 2 :(得分:1)

我不确定是不是这样,但你打电话给[[NSUserDefaults standardUserDefaults] registerUserDefaults:...]