1

NSDefaultsから値を保存/保存して、アプリケーションを終了したときにSettings.bundleに保存されるようにする方法を見つけようとしています。これが私がしていることです...

NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:@"M1", @"IDMissiles", 
                                                                    @"G2", @"IDGuns", 
                                                                    @"B3", @"IDBombs",
                                                                    @"KM", @"IDDistance", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

次のようにすると、NSUserDefaultsから値が正しく出力されます...

NSLog(@"IDMissiles: %@", [userDefaults stringForKey:@"IDMissiles"]);
NSLog(@"IDGuns    : %@", [userDefaults stringForKey:@"IDGuns"]);
NSLog(@"IDBombs   : %@", [userDefaults stringForKey:@"IDBombs"]);
NSLog(@"IDDistance: %@", [userDefaults stringForKey:@"IDDistance"]);

ただし...アプリケーションを実行するたびに、NSUserDefaultsの値は(null)で始まり[[NSUserDefaults standardUserDefaults] synchronize];、次にアプリケーションを実行するときに値が保存されると思っていましたが、そのような運はありませんでした。

4

4 に答える 4

2

使用する代わりに

[[NSUserDefaults standardUserDefaults] registerDefaults:settings];

これを試して:

[[NSUserDefaults standardUserDefaults] setObject:settings forKey:@"settings"];

次に、次のようなデフォルトから取得します。

NSLog(@"IDMissiles:%@[[[NSUserDefaultsstandardUserDefaults]objectForKey:@"settings"]objectForKey:@"IDMissiles"]);
于 2012-05-23T13:00:36.953 に答える
1

ドキュメントから:

登録ドメインの内容はディスクに書き込まれません。アプリケーションが起動するたびにこのメソッドを呼び出す必要があります。アプリケーションのResourcesディレクトリにplistファイルを配置し、そのファイルから読み込んだ内容でregisterDefaults:を呼び出すことができます。

つまり、このようなデフォルトを登録しても何も保存されません。アプリと設定バンドルの両方でデフォルト値を使用するには、ここで説明するように、設定バンドルを個別に維持する必要があります。

于 2012-05-23T13:13:20.857 に答える
1

settings.bundleを操作しているときに私が発見したことの1つは、実際に設定ペインを開くまで、どの値も初期化されないことです。デフォルト値をそこに保存することができますが、設定を開くまでデフォルト値はnilを返します。

そこに値を保存しようとしたときにこれが発生するかどうかはわかりませんが、設定ペインを開かないでください。

設定ペインを使用していない場合は、registerDefaultsオプションを使用しないでください。

代わりにこれを試してください。

[[NSUserDefaults standardDefaults] setObject:@"M1" forKey:@"IDMissiles"];
// set remaining values
[[NSUserDefaults standardDefaults] synchronize]; // this really only needs to be called if you plan on accessing values right away, otherwise they are saved automatically after the next run loop
于 2012-05-23T13:05:58.930 に答える
0
   NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
   [NSUserDefaults removeObjectForKey:@"userDefaults"];
   [userDefaults setObject:[settings objectForKey:@"mainData"] forKey:@"userDefaultsValue"];
   [userDefaults synchronize];
于 2012-05-23T13:13:36.960 に答える