0

NSUserDefaultsの奇妙な動作が発生しています。データを保存してから同期し、NSUserDefaultsのNSlogを実行して、データが保存されていることを確認します。データはNSlogから正しく保存されたものとして表示されますが、アプリを完全に閉じたとき(ホームボタンをダブルクリックしてアプリを強制終了したとき)、再起動したときに値は変更されていません。さらに奇妙なことに、NSUserDefaultsを保存し、アプリを強制終了し、NSUserDefaultsをリロードしてコードを数回繰り返すと、正しく保存される場合とされない場合があります。

私はこの投稿の奇妙なNSUserDefaultsの動作を読みましたが、同期を呼び出しているので、それが私の問題ではないと思います。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:@"MyString" forKey:@"testString"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

どんな助けでも大歓迎です。

私を本当に混乱させるのは、standardUserDefaultsのNSLogがデータが保存されていることを示している場合、アプリが強制終了された後ではないのはなぜですか?

ありがとう


アップデート


問題は、NSUserDefaultsに保存していた可変配列と不変配列の取り違えにあったようです。データを取得するときにmutablecopyを使用しましたが、問題は解決したようです。

4

1 に答える 1

0

値を取得するには、次のようなものを使用できます

NSUserDEfaults *ud = [NSUserDefault standarUserDefaults];
[ud objectForKey=@"YourKey"];

nil が返された場合は、保存されていません。

于 2013-02-24T20:47:27.820 に答える