在复制您的代码并添加更多调试语句之后,看起来事情似乎就是您想要的样子。我在 Xcode 4 中创建了一个新的基于视图的项目,添加了一个带有 5 个带NSString默认值的键的“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
这正如预期的那样。您一定是在做其他错误的事情,因为这似乎是正确的。