我将keyboard shortcuts表示为NSDictionary
个实例存储到用户默认值中,并且在表示“无”值时遇到一些问题。当我的应用程序启动时,我注册了一些默认快捷方式。然后,用户可以在应用程序首选项中更改键盘快捷键。键盘设置小部件直接绑定到用户默认值。
用户可以单击清除键盘快捷键的特殊“清除”按钮,这意味着用户不希望为给定功能设置快捷方式。清除键盘快捷键后,它将设置为nil
。这是一个问题,因为在用户默认值中将快捷方式设置为nil
会将值恢复为使用registerDefaults:
注册的值。 (objectForKey:
方法在应用域中找不到给定的密钥,因此会进入NSRegistrationDomain
域。)
我应该如何表示“已清除”的键盘快捷键,以便objectForKey:
返回nil
?我是否必须使用空NSDictionary
个实例和其他标记值来玩游戏,还是有更好的方法?
答案 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
之间进行转换,以便我的类不必关心。它并不完美,但似乎是一种可以容忍的解决方案。