コードを複製し、さらにデバッグ ステートメントを追加すると、希望どおりのように見えます。Xcode 4 で新しいビューベースのプロジェクトを作成し、NSString
デフォルト値を持つ 5 つのキーを持つ「DefaultsPrefs.plist」を追加しました。AppDelegate は次のように変更されました。
- (IBAction) savePreferences:(id)sender {
NSUserDefaults* prefs = [NSUserDefaults standardUserDefaults];
NSLog(@"NSUserDefaults: %@", [prefs dictionaryRepresentation]);
[prefs synchronize];
[[NSUserDefaults standardUserDefaults] setObject:@"UpdatedKey1Val" forKey:@"MyKey1"];
[[NSUserDefaults standardUserDefaults] setObject:@"UpdatedKey2Val" forKey:@"MyKey2"];
NSLog(@"NSUserDefaults: %@", [prefs dictionaryRepresentation]);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
NSLog(@"MyKey1 before registerDefaults: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"MyKey1"]);
NSLog(@"MyKey2 before registerDefaults: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"MyKey2"]);
NSDictionary *userDefaultsDefaults = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DefaultsPrefs" ofType:@"plist"]];
NSLog(@"MyKey1 from userDefaultsDefaults: %@", [userDefaultsDefaults objectForKey:@"MyKey1"]);
NSLog(@"MyKey2 from userDefaultsDefaults: %@", [userDefaultsDefaults objectForKey:@"MyKey2"]);
[[NSUserDefaults standardUserDefaults] registerDefaults:userDefaultsDefaults];
NSLog(@"MyKey1 after registerDefaults: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"MyKey1"]);
NSLog(@"MyKey2 after registerDefaults: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"MyKey2"]);
[self savePreferences:nil];
return YES;
}
(から無関係なペアを取り除くNSUserDefaults
)の出力で:
MyKey1 before registerDefaults: (null)
MyKey2 before registerDefaults: (null)
MyKey1 from userDefaultsDefaults: InitialMyKey1Val
MyKey2 from userDefaultsDefaults: InitialMyKey2Val
MyKey1 after registerDefaults: InitialMyKey1Val
MyKey2 after registerDefaults: InitialMyKey2Val
NSUserDefaults: {
MyKey1 = InitialMyKey1Val;
MyKey2 = InitialMyKey2Val;
MyKey3 = InitialMyKey3Val;
MyKey4 = InitialMyKey4Val;
MyKey5 = InitialMyKey5Val;
}
NSUserDefaults: {
MyKey1 = UpdatedKey1Val;
MyKey2 = UpdatedKey2Val;
MyKey3 = InitialMyKey3Val;
MyKey4 = InitialMyKey4Val;
MyKey5 = InitialMyKey5Val;
}
再度実行すると、出力が開始されます。
MyKey1 before registerDefaults: UpdatedKey1Val
MyKey2 before registerDefaults: UpdatedKey2Val
これは予想通りです。これは正しいように見えるので、何か間違ったことをしているに違いありません。