2010-09-24 52 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]; 
}