2010-11-08 58 views
2

雖然我的iPhone應用程序正在運行,但我在NSUserDefaults中存儲了一些數據(NSStrings)。我正在爲fyi遊戲存儲高分。當我雙擊主頁按鈕並殺死應用程序時,我重新啓動應用程序時,存儲在NSUserDefaults中的值通常不存在。 這是怎麼發生的?奇怪的NSUserDefaults行爲

我正在使用的代碼是在全方位的售前,多任務操作系統(3.0等)工作的罰款。從讀取/搜索網絡,它看起來像做[NSUserDefaults standardUserDefaults] synchronize];可以提供幫助。有什麼想法嗎?

謝謝!

回答

7

從任務欄殺死一個應用程序時,它的懸浮只是將它發送的SIGKILL消息;沒有優雅的關機發生。

如果您正在爲應用程序設置背景並殺死該應用程序,那麼在應用程序死亡之前,您可能不會獲得用戶默認值同步(寫入磁盤),這通常是通過內部計時器發生的,但是如果您已經寫入到默認值,然後在自動同步發生之前該東西被暫停,這可以解釋這種行爲。

把這個(如你注意):

[[NSUserDefaults standardUserDefaults] synchronize]; 
在應用程序委託你 -applicationDidEnterBackground處理

。這樣,即使應用程序在後臺死亡或被殺害,您也知道默認設置已被寫入。

作爲一名防守型的做法,我一般顯式調用同步的默認對象每次我寫的,我認爲非常重要的狀態的時間。

+0

太棒了!感謝您的迴應。在applicationDidEnterBackground中調用同步工作。 – MrDatabase 2010-11-08 00:37:36

2

你在哪裏調用-synchronize方法?您是否注意到操作系統發送的讓您知道您的應用程序即將關閉的應用程序委託消息?

+0

我根本沒有調用-synchronize方法:-( – MrDatabase 2010-11-08 00:29:06