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