52

こんにちは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 を返します。誰か助けてくれませんか?

4

4 に答える 4

204

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

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

[[NSUserDefaults standardUserDefaults] synchronize];



補遺:

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

于 2010-04-12T14:50:40.557 に答える
10

このコードは私にとってはうまくいきます。

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:myString forKey:@"Prefs"];
    [standardUserDefaults synchronize];
}
于 2012-01-16T12:04:54.443 に答える
2

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

于 2010-04-12T14:46:42.477 に答える
1

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

于 2014-06-09T19:56:55.720 に答える