2011-08-17 7 views
3

私はアプリケーションがクラッシュしたときに(デバッグのために)知っておく必要があります。アプリケーションが終了すると、デリゲートの- (void)applicationWillTerminate:(UIApplication *)applicationが呼び出されます。applicationWillTerminateがクラッシュ時に呼び出される

私の理解から、アプリケーションがクラッシュしたときにその行を呼び出すべきではありませんが、何らかの理由でそれを呼び出すべきではありません。 (アプリケーションにDIDがクラッシュしない場合はNSUserDefaultsに値を設定するコードがありますが、DIDクラッシュの場合は変更されません)

いくつかの詳細:- (void)applicationDidBecomeActive:(UIApplication *)applicationが呼び出されると、NSUserDefaultsキーが私のプログラムはYESに設定されています。 - (void)applicationWillTerminate:(UIApplication *)applicationが呼び出されると、その同じキーはNOに設定されます。次の起動時に、アプリケーションは、同じキーがYESまたはNOに設定されているかどうかを確認します。計画は、キーがYESであるかどうかをチェックすることでした。そうであれば、それは正しく閉じられなかったことを意味します(つまり、クラッシュしました)。

クラッシュするかどうかを確認する代わりに、どうすればよいですか?

+0

どのようなクラッシュがありますか?あなたは記憶が少ないと言っていますか? – sidyll

答えて

5

問題がNSUserDefaultsに書き込まれていても、必ずしもその値をディスクに同期させるわけではありません。一般に、NSUserDefaultsは30秒ごとにディスクへの変更を同期します。何が起きているのかYESNSUserDefaultsに保存してから、ディスクに同期する前にクラッシュするため、次回の起動時に再びNOに戻ります。ここでの修正は、YESの値を格納した後に-[NSUserDefaults synchronize]にコールして、ディスクの同期を強制的に実行させることです。

-synchronizeは比較的高価であるため、値がディスクにすぐに書き込まれるようにする必要がある場合にのみ使用してください。あなたが説明するケースが適格です。その他のケースはほとんどありません。

+0

これはそれです!ありがとう!私は数分で答えを受け入れてくれます。 – Baub

+0

それはまだ5年後の素晴らしい答えです.. ..ありがとう.. –

関連する問題