2

iPhoneアプリの実行中に、NSUserDefaultsにいくつかのデータ(NSStrings)を保存します。私はちょうどfyiのゲームのハイスコアを保存しています。ホームボタンをダブルタップしてアプリを強制終了すると、アプリを再起動したときにNSUserDefaultsに保存した値が表示されないことがよくあります。 なぜこうなった?

私が使用しているコードは、すべてのプリマルチタスクOS(3.0など)で正常に機能していました。ネットの読み取り/検索から、 [NSUserDefaultsstandardUserDefaults]同期]を実行しているように見えます。助けることができます。何かご意見は?

ありがとう!

4

3 に答える 3

7

一時停止中にタスクバーからアプリを強制終了すると、SIGKILLメッセージが送信されます。正常なシャットダウンは発生しません。

バックグラウンドでアプリを強制終了している場合、アプリが終了する前にユーザーのデフォルトが同期されていない(ディスクに書き込まれている)可能性があります。これは通常、内部タイマーで自動的に発生しますが、デフォルトに書き込んだ場合はその後、自動同期が行われる前に処理が一時停止されます。これにより、この動作が説明される可能性があります。

これを入れてください(あなたが注意するように):

 [[NSUserDefaults standardUserDefaults] synchronize];

-applicationDidEnterBackgroundアプリデリゲートのハンドラーで。そうすれば、アプリがバックグラウンドで停止したり強制終了したりした場合でも、デフォルトが書き込まれていることがわかります。

防御策として、私は通常、非常に重要であると考える状態を書き込むたびに、デフォルトオブジェクトで明示的に同期を呼び出します。

于 2010-11-08T00:21:29.293 に答える
2

-synchronizeメソッドをどこで呼び出していますか?アプリがダウンしようとしていることを通知するOSから送信されるアプリデリゲートメッセージに注意を払っていますか?

于 2010-11-08T00:21:03.793 に答える
1

いつも夢みてなのかわかりませんが、電話したことがあります[[NSUserDefaults standardUserDefaults] registerUserDefaults:...]か?

于 2010-11-08T00:17:51.630 に答える