こんにちは、NSUserDefaults
を使用してデータベースにデフォルト値を保存しようとしています。 NSUserDefaults
に値を保存することができます(NSLog
でチェックしたこともあります)。ここで、アプリケーションの再起動時にアプリのデリゲートに値が必要です。しかし、NSUserDefaults
には何も入っていません。以下は、NSUserDefaults
に値を保存するクラスのコードです。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:appDel.dictProfile forKey:@"dict"];
NSLog(@"%@",[prefs valueForKey:@"dict"]);
App Delegagteのコードは次のとおりです。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"%@",[prefs valueForKey:@"dict"]);
上記のコードは常にnullを返します。誰か助けてください。
ホームボタン(シミュレーターまたはデバイス上)を押してアプリを終了すると、NSUserDefaults
が保存されます。
Xcode(シミュレーターまたはデバイス上)で「停止」を押してアプリを終了すると、NSUserDefaults
mightが保存されますが、保存されない可能性は高くなります。 NSUserDefaults
はすべての変更を定期的に永続化します。永続化される前にプロセスを終了すると、それらは消えます。次を呼び出して、強制的に保存できます。
[[NSUserDefaults standardUserDefaults] synchronize];
IOS4では(この回答はiOS3がパブリックリリースであったときに最初に書かれました)、NSUserDefaults
はホームボタンを押しても保存されない場合があります。 [[NSUserDefaults standardUserDefaults] synchronize]
でapplicationDidEnterBackground:
を手動で呼び出すと、NSUserDefaults
が正しく保存されるようになります(これは実際に組み込みの動作IMOである必要があります)。
このコードは私にとってはうまく機能します。
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
if (standardUserDefaults) {
[standardUserDefaults setObject:myString forKey:@"Prefs"];
[standardUserDefaults synchronize];
}
デバイスで実行しているのかシミュレータで実行しているのかは言いませんでしたが、シミュレータでアプリケーションを再起動すると、Xcodeから起動した場合、起動間ですべての設定がリセットされます。プリファレンスは、シミュレーター自体から再起動した場合にのみ保持されます。
私の場合、文字列を保存して取得していました。保存後に同期してから別のスレッドで取得すると、正常に動作しませんでした。この問題は、保存後と取得前の両方で同期することで解決しました。