Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 我如何表示a“;无”;NSUserDefaults中的值?_Cocoa_Macos_Nsuserdefaults - Fatal编程技术网

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
之间进行转换,这样我的类就不必在意了。这并不完美,但似乎是一个可以接受的解决方案