2010-11-08 61 views
2

虽然我的iPhone应用程序正在运行,但我在NSUserDefaults中存储了一些数据(NSStrings)。我正在为fyi游戏存储高分。当我双击主页按钮并杀死应用程序时,我重新启动应用程序时,存储在NSUserDefaults中的值通常不存在。 这是怎么发生的?奇怪的NSUserDefaults行为

我正在使用的代码是在全方位的售前,多任务操作系统(3.0等)工作的罚款。从读取/搜索网络,它看起来像做[NSUserDefaults standardUserDefaults] synchronize];可以提供帮助。有什么想法吗?

谢谢!

回答

7

从任务栏杀死一个应用程序时,它的悬浮只是将它发送的SIGKILL消息;没有优雅的关机发生。

如果您正在为应用程序设置背景并杀死该应用程序,那么在应用程序死亡之前,您可能不会获得用户默认值同步(写入磁盘),这通常是通过内部计时器发生的,但是如果您已经写入到默认值,然后在自动同步发生之前该东西被暂停,这可以解释这种行为。

把这个(如你注意):

[[NSUserDefaults standardUserDefaults] synchronize]; 
在应用程序委托你 -applicationDidEnterBackground处理

。这样,即使应用程序在后台死亡或被杀害,您也知道默认设置已被写入。

作为一名防守型的做法,我一般显式调用同步的默认对象每次我写的,我认为非常重要的状态的时间。

+0

太棒了!感谢您的回应。在applicationDidEnterBackground中调用同步工作。 – MrDatabase 2010-11-08 00:37:36

2

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

+0

我根本没有调用-synchronize方法:-( – MrDatabase 2010-11-08 00:29:06