我有一个AppDelegate类,其中包含+(void)initialize
方法,我使用它来注册一些默认值。这是我使用的代码:
我有一个AppDelegate类,其中包含
+(void)initialize
方法,我使用它来注册一些默认值。这是我使用的代码:+ (void)initialize {
NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
我还创建了一个 Preferences.xib,其中包含几个复选框 (NSButton
),显示偏好设置的状态。它们与 NSUserDefaultsController
绑定到相同的键 (在此情况下是fooKey和barKey)。每次启动应用程序并更改“defaults”后,它们会在下次启动应用程序时恢复。
有没有办法注册“默认默认值”,而不覆盖已经存在的值?也许每次构建和启动应用程序时,它的偏好文件都会被重新创建?也许我应该取消复选框与NSUserDefaultsController
的绑定,并通过一些自定义代码在偏好窗口控制器中自己维护键的值?
我想听听您的用户偏好设置维护实现选择。
我正在使用 Mac OS X 10.6.2 和 XCode 3.2.1
[NSNumber numberWithBool:NO]
,否则在用户默认设置中的值将不是布尔类型。 - Peter Hosey+ (void)initialize
的实现应始终以if (self != [YourClass class]) { return; }
开头,否则如果您的子类未实现自己的+ (void)initialize
方法,则会被调用多次。还要记住使用[YourClass class]
而不是[self class]
。(这是其中一个正确调用类自己方法的地方之一)。所有这些都是因为运行时以特殊方式处理+ (void)initialize
:没有重载。每个类都会调用其实现(或超类的实现,如果没有提供)。 - Regexident