如何在NSUserDefaults中表示“无”值?

时间:2011-04-04 15:28:54

标签: cocoa macos nsuserdefaults

我将keyboard shortcuts表示为NSDictionary个实例存储到用户默认值中,并且在表示“无”值时遇到一些问题。当我的应用程序启动时,我注册了一些默认快捷方式。然后,用户可以在应用程序首选项中更改键盘快捷键。键盘设置小部件直接绑定到用户默认值。

用户可以单击清除键盘快捷键的特殊“清除”按钮,这意味着用户不希望为给定功能设置快捷方式。清除键盘快捷键后,它将设置为nil。这是一个问题,因为在用户默认值中将快捷方式设置为nil会将值恢复为使用registerDefaults:注册的值。 (objectForKey:方法在应用域中找不到给定的密钥,因此会进入NSRegistrationDomain域。)

我应该如何表示“已清除”的键盘快捷键,以便objectForKey:返回nil?我是否必须使用空NSDictionary个实例和其他标记值来玩游戏,还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

我最终使用了这个变压器:

@interface NullTransformer : NSValueTransformer {}
@end

@implementation NullTransformer

+ (BOOL) allowsReverseTransformation {
    return YES;
}

- (id) transformedValue: (id) value {
    return [value count] ? value : nil;
}

- (id) reverseTransformedValue: (id) value {
    return value ? value : [NSDictionary dictionary];
}

@end

换句话说,我使用空字典来表示未设置的值,并使用自定义转换器在此特殊值和nil之间进行转换,以便我的类不必关心。它并不完美,但似乎是一种可以容忍的解决方案。