如何确保在应用程序退出时NSUserDefaults设置保存到磁盘?

时间:2010-09-24 09:11:53

标签: iphone nsuserdefaults

出于某种原因,由于多任务处理已经到来,每次应用关闭时,NSUserDefaults似乎都不再将设置保存到磁盘。

发生这种情况: 当在NSUserDefaults中更改设置并按下主页按钮时,主屏幕变为可见。应用程序仍在后台运行。然后我按两次主页按钮,从任务管理器中删除该应用程序。应用程序现在真的退出了。然后我点击应用程序的图标再次启动它。 Voilla:设置没有存储!错了,旧的价值!

但是,当我这样做时,它可以工作:按主页按钮,再次点击应用程序图标,再次按主页按钮,然后现在双击主页按钮并终止应用程序。再次点按图标。现在该应用程序显示正确的设置。

我从未明确地保存过NSUserDefaults,因为它总能正常工作。但是现在,iOS似乎不够聪明,不能自动执行...有什么我可以在app委托中的任何“app will quit now”方法中调用,以便NSUserDefaults dict真的得到保存?

1 个答案:

答案 0 :(得分:9)

NSUserDefaults更改在发送synchronize消息时保存:

[[NSUserDefaults standardUserDefaults] synchronize];

系统仅在应用程序终止时自动调用此方法。系统每隔几秒钟调用一次,这就是为什么看到你的设置被保存会有明显的延迟。

在iOS 4中,如果让它支持多任务处理,应用程序实际上并不会完全终止(也就是退出)。如果您想要支持多任务处理,并且还希望用户默认设置在应用程序离开前台时保存,您可以在应用代理的applicationDidEnterBackground:中调用上述消息,如下所示:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}