CoreFoundation获取CFDictionaryRef中键的值

时间:2017-02-04 22:26:18

标签: ios objective-c core-foundation

我有这个功能

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];

并将其传递给函数。

有没有人知道这有什么问题?

0 个答案:

没有答案