2010-09-24 53 views
4

出于某种原因,由于多任务处理已经到来,每当应用程序关闭时,NSUserDefaults似乎都不再将设置保存到磁盘。如何确保NSUserDefaults设置在应用程序退出时保存到磁盘?

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

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

我从来没有明确地保存NSUserDefaults,因为它总是工作正常。但是现在,iOS似乎不够聪明,无法自动完成这个任务......有什么我可以调用的应用程序委托中的任何“app will quit now”方法,以便NSUserDefaults字典真正得到保存?

回答

9

NSUserDefaults改变被保存时,它发出了synchronize消息:

[[NSUserDefaults standardUserDefaults] synchronize]; 

系统调用该自动仅当应用程序终止。系统每隔几秒钟就会调用一次,这就是为什么在保存设置时出现明显的延迟。

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

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