我有一个 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:
(强调):
注册域的内容不会写入磁盘;每次应用程序启动时都需要调用此方法。您可以将 plist 文件放置在应用程序的 Resources 目录中,并使用从该文件中读取的内容调用 registerDefaults: 。
所以你的代码是在正确的轨道上。这就是注册默认值的方式。
我通常用这个-applicationDidFinishLaunching:
:
// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];
使用 plist 可以轻松地在应用程序中添加和更改默认值,并且可以防止您犯下使用错误@"NO"
也作为一个值。
Edit: Swift 3变体:
UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)