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

ope*_*rog 4 iphone nsuserdefaults

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

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

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

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

Bol*_*ock 9

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

[[NSUserDefaults standardUserDefaults] synchronize];
Run Code Online (Sandbox Code Playgroud)

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

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

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}
Run Code Online (Sandbox Code Playgroud)