可可 – 如何注册用户默认使用NSUserDefaults而不覆盖现有的值?

我有一个AppDelegate类与(void)initialize方法,我用来注册一些默认值。这里是我使用的代码:

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

我还创建了Preferences.xib,它保存了两个复选框(NSButton),显示首选项的状态。它们绑定到具有相同键的NSUserDefaultsController(在这种情况下为fooKey和barKey)。每次启动应用程序并更改“默认值”时,都会在下次启动应用程序时恢复。

有没有办法注册“默认默认值”,而不覆盖已经存在的值?也许每次我构建和启动一个应用程序的首选项文件正在重新创建?也许我应该解除绑定NSUserDefaultsController的复选框,并保持键的值自己与偏好窗口控制器中的一些自定义代码?

我想听听您的实施选择维护用户默认值。

我使用Mac OS X 10.6.2和XCode 3.2.1

最佳答案
从-registerDefaults的文档:(强调添加):

The contents of the registration domain are not written to disk; you need to call this method each time your application starts. You can place a plist file in the application’s Resources directory and call registerDefaults: with the contents that you read in from that file.

所以你的代码是在正确的轨道。这是您注册默认默认值的方式。

我通常使用这个在-applicationDidFinishLaunching ::

    // Load default defaults
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

使用plist可以很容易地添加和更改应用程序中的默认值,并防止您错误地使用@“NO”作为值。

转载注明原文:可可 – 如何注册用户默认使用NSUserDefaults而不覆盖现有的值? - 代码日志