我有这个功能
valueForKey(CFDictionaryRef dict, CFStringRef key) {
CFTypeRef valueX = CFSTR("key not found");
NSDictionary *settings = (__bridge NSDictionary *)dict;
NSString *keyString = (__bridge NSString *)key;
NSLog(@"valueForKey: %@ inDict: %@ value: %@",keyString,settings,settings[keyString]);
NSLog(@"allKeys: %@ allValues: %@",settings.allKeys,settings.allValues);
if (CFDictionaryGetValueIfPresent(dict, key, &valueX)) {
NSLog(@"CFDictionaryGetValueIfPresent: %@",valueX);
} else {
NSLog(@"CFDictionaryGetValueIfPresent not found");
}
}
valueX打印出"未找到密钥"
它基本上从字典中获取键的值。 (我想在一个单独的函数中执行此操作,因此我没有那么多代码重复)。
以下是调用函数时的输出:
valueForKey: kEnabled inDict: {
kEnabled = 1;
} value: (null) allKeys: (
kEnabled
) allValues: (
1
) CFDictionaryGetValueIfPresent not found
因此密钥显然在字典中,但获取密钥的值将返回NULL。真奇怪。
所以我做了一个小测试:在我插入的函数的顶部
key = CFSTR("kEnabled");
所以我硬编码了密钥并覆盖了参数(在某种程度上无法在字典中找到)。这很有效,我从词典中获得了价值。
以下是我创建原始参数字符串的方法:
CFStringRef key = (__bridge CFStringRef)[myObject identifier];
并将其传递给函数。
有没有人知道这有什么问题?