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

Posted

技术标签:

【中文标题】应用退出时如何确保 NSUserDefaults 设置保存到磁盘?【英文标题】:How to make sure NSUserDefaults settings get saved to disk when the app quits? 【发布时间】:2010-09-24 09:11:53 【问题描述】:

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

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

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

我从来没有明确地保存过 NSUserDefaults,因为它总是运行良好。但是现在,ios 似乎还不够聪明,无法自动执行此操作......我可以在应用程序委托中的任何“应用程序将立即退出”方法中调用任何东西,以便真正保存 NSUserDefaults 字典吗?

【问题讨论】:

【参考方案1】:

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

[[NSUserDefaults standardUserDefaults] synchronize];

只有在应用程序终止时系统才会自动调用它。系统也会每隔几秒调用一次,这就是为什么在看到您的设置保存时会有明显的延迟。

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

- (void)applicationDidEnterBackground:(UIApplication *)application

    [[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

以上是关于应用退出时如何确保 NSUserDefaults 设置保存到磁盘?的主要内容,如果未能解决你的问题,请参考以下文章

NSUserDefaults:保存的数字始终为 0,iPhone

xcode swift:NSUserDefaults:如果退出应用程序,则保存高分并在停止的地方重新启动它

通过加载 NSUserDefaults 检查多行

NSUserDefaults 问题(如何在启动应用程序时在需要时打开不同的 viewController)

如何判断 iPhone 应用程序是不是通过后台启动

按下后退按钮时如何退出?