web-dev-qa-db-ja.com

NSUserDefaultsが値を保存しないのはなぜですか?

こんにちは、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を返します。誰か助けてください。

52
pankaj

ホームボタン(シミュレーターまたはデバイス上)を押してアプリを終了すると、NSUserDefaultsが保存されます。

Xcode(シミュレーターまたはデバイス上)で「停止」を押してアプリを終了すると、NSUserDefaultsmightが保存されますが、保存されない可能性は高くなります。 NSUserDefaultsはすべての変更を定期的に永続化します。永続化される前にプロセスを終了すると、それらは消えます。次を呼び出して、強制的に保存できます。

[[NSUserDefaults standardUserDefaults] synchronize];



補遺:

IOS4では(この回答はiOS3がパブリックリリースであったときに最初に書かれました)、NSUserDefaultsはホームボタンを押しても保存されない場合があります。 [[NSUserDefaults standardUserDefaults] synchronize]applicationDidEnterBackground:を手動で呼び出すと、NSUserDefaultsが正しく保存されるようになります(これは実際に組み込みの動作IMOである必要があります)。

204
Nick Forge

このコードは私にとってはうまく機能します。

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
11
Kannan Prasad

デバイスで実行しているのかシミュレータで実行しているのかは言いませんでしたが、シミュレータでアプリケーションを再起動すると、Xcodeから起動した場合、起動間ですべての設定がリセットされます。プリファレンスは、シミュレーター自体から再起動した場合にのみ保持されます。

2
Claus Broch

私の場合、文字列を保存して取得していました。保存後に同期してから別のスレッドで取得すると、正常に動作しませんでした。この問題は、保存後と取得前の両方で同期することで解決しました。

1
juan Isaza