2011-08-17 90 views
3

我有一個應用程序需要知道它何時崩潰(用於調試目的)。當應用程序關閉時,它會在委託中調用- (void)applicationWillTerminate:(UIApplication *)applicationapplicationWillTerminate在調用時崩潰

從我的理解,它不應該在應用程序崩潰時調用該行,但由於某種原因它不會。 (我在那裏的代碼,在NSUserDefaults設置一個值,如果應用程序沒有崩潰,但不會改變任何事情,如果它沒有崩潰。)

了幾個具體問題:當- (void)applicationDidBecomeActive:(UIApplication *)application被調用時,在NSUserDefaults我的鑰匙程序設置爲YES。當調用- (void)applicationWillTerminate:(UIApplication *)application時,同一個鍵被設置爲NO。在下次啓動時,應用程序會檢查相同的密鑰是否設置爲YES或NO。計劃是檢查密鑰是否爲YES,如果是,則表示它沒有正確關閉(即崩潰)。

我應該用什麼來檢查它是否崩潰?

+0

究竟是什麼樣的崩潰?你是指低內存? – sidyll

回答

5

您的問題是寫入NSUserDefaults不一定將該值同步到磁盤。一般來說,NSUserDefaults會每隔30秒左右將更改同步到磁盤。發生了什麼是您在NSUserDefaults中存儲YES,然後在同步到磁盤之前發生崩潰,因此在下一次啓動時,它會再次返回到NO。此處的修復方法是在存儲YES值以強制磁盤同步立即發生後調用-[NSUserDefaults synchronize]

請注意,因爲-synchronize相對昂貴,所以只有在絕對需要確保將值立即寫入磁盤時,才應使用它。你描述的情況是合格的。其他情況很少。

+0

這就是它!謝謝!我會在幾分鐘後接受答案。 – Baub

+0

5年後仍然是一個很好的答案..謝謝.. –

相關問題