我有一个带有+(void)initialize
方法的AppDelegate类,我用它来注册一些默认值。这是我使用的代码:
+ (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
答案 0 :(得分:75)
来自-registerDefaults:
的文档(强调添加):
注册域的内容不会写入磁盘; 每次启动应用程序时都需要调用此方法。您可以将plist文件放在应用程序的Resources目录中,并使用从该文件中读取的内容调用registerDefaults:。
所以你的代码是在正确的轨道上。这是您注册默认默认值的方式。
我通常在-applicationDidFinishLaunching:
:
// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
使用plist可以轻松添加和更改应用中的默认值,并且可以防止您将@"NO"
作为值使用错误。
编辑: Swift 3 变体:
UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])