应用退出时如何确保 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:如果退出应用程序,则保存高分并在停止的地方重新启动它