2

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

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

谢谢!

4

3 回答 3

7

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

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

把这个(如你所注):

 [[NSUserDefaults standardUserDefaults] synchronize];

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

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

于 2010-11-08T00:21:29.293 回答
2

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

于 2010-11-08T00:21:03.793 回答
1

我不确定是不是这个,但是你打过电话[[NSUserDefaults standardUserDefaults] registerUserDefaults:...]吗?

于 2010-11-08T00:17:51.630 回答