0

親愛なる専門家と友人へ

こんにちは、私は一日中これをダウンさせようとしていますが、私が試したことは何もうまくいかないようです. 基本的に、NSDefaultを使用して文字列の配列(最大:20、重いものは何もない)を保存したいと思います。保存し、正常にロードしますが、マイナスボタンを押して実際のデバイスでアプリを強制終了したときはそうではありません。iPhone 4gs (iOS 6) でテストしました。

試してみ ましたが、うまくいきませんでした。
[[NSUserDefaults standardUserDefaults] synchronize];
in both
applicationWillTerminate:(UIApplication *)application
and
applicationDidEnterBackground:(UIApplication *)application

注: NSLog から、実際のデバイスのバックグラウンドでアプリケーションを強制終了しない限り、NSDefault から正常に値を取得しています。

誰かが理由を知っていますか?よろしくお願いします。サンプルとともに引用してください。

========================= 編集 (コードの追加):

より明確になり、誰かが本当に私をここで助けてくれることを期待して、いくつかのコードを追加しています。

前もって感謝します。何らかのアクション、その後

self.count = [NSNumber numberWithInt:[self.count intValue] + 1];
count is a NSNumber 
 NSData *count = [NSKeyedArchiver archivedDataWithRootObject:self.count];
[[NSUserDefaults standardUserDefaults] setObject:count forKey:@"count"];
[[NSUserDefaults standardUserDefaults] synchronize];
arrayForSavedKey is a NSMutableArray
[[NSUserDefaults standardUserDefaults] synchronize];
NSData *array = [NSKeyedArchiver archivedDataWithRootObject:self.arrayForSavedKey];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"arrayForSavedKeys"];

両方:
applicationWillResignActive:(UIApplication *)application

applicationWillEnterBackground:(UIApplication *)application

次の行を追加しようとしました [[NSUserDefaults standardUserDefaults] synchronize]; データを取得するために、次のように呼び出してクラス A のメソッドを呼び出すデリゲートがあります。

NSData *savedKeys = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayForSavedKeys"];<br>
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:savedKeys]];<br>
self.arrayForSavedKey = [[NSMutableArray alloc] initWithArray: array];<br>

(その中にはわずかな NSStrings しかありません)

出力を NSLOG すると、マイナス記号でアプリを強制終了しない限り、すべて問題ありません。(ただし、実際のデバイスでは、もちろん、NSLogからは何も見えません。アプリを強制終了すると、xCodeでもアプリの実行が停止するためです)

今日は一日中過ごして、頭がいっぱいです。助けてください。

4

1 に答える 1

3

applicationWillTerminate:いくつかの非常に特殊なケースでのみ呼び出されるため、わざわざ使用しないでください。

を使用applicationWillEnterForeground:してデフォルトを保存するのは遅すぎます。

呼び出す適切な場所[[NSUserDefaults standardUserDefaults] synchronize];applicationDidEnterBackground:メソッド内です。このように、アプリがバックグラウンドで強制終了された場合、デフォルトは既に保存されています。

于 2013-06-25T23:49:53.223 に答える