如何使用CFMutableDictionary和char数组作为键,整数作为值?

时间:2010-11-03 12:43:59

标签: iphone xcode iphone-sdk-3.0 ios4 core-foundation

我正在使用现有的iPhone应用程序,同时需要更改C的代码。

我想在标准C文件中使用字典,简单,我不能使用NSDictionary,编译器说它在c99中无效(因为找不到头文件Fou​​ndation / Foundation.h和Foundation / NSDictionary.h),但CFDictionaryRef可用(可以找到并导入coz头CoreFoundation / CoreFoundation.h)。然后我尝试使用CFDictionary,我不能将键值对插入字典中,任何人都可以花一些时间看看下面的代码吗?在此先感谢!!

ps,以下代码的输出为:

字数大小:0 密钥:text.html,值:111

表示未插入键值对...


CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

printf("Dict size: %d\n", (int)((CFIndex)CFDictionaryGetCount(dict)));

int i = 111;
char c[] = "text.html";

const void *key = &c;
const void *value = &i;

printf("Key: %s, value: %d\n", key, *(int *)value);

CFDictionarySetValue(dict, key, value); 

printf("Added\n");

printf("Dict size: %d\n", (int)((CFIndex)CFDictionaryGetCount(dict)));

value = (int *)CFDictionaryGetValue(dict, key);

printf("Value:  %d\n", *(int *)value);

感谢您的输入,以下是工作代码。


// init dict CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL,0,& kCFTypeDictionaryKeyCallBacks,& kCFTypeDictionaryValueCallBacks);

    //insert key-value
int i = 111;
const void *value = &i;
CFDictionaryAddValue(dict, CFSTR("text.html"), CFNumberCreate(NULL, kCFNumberSInt32Type, value));
CFNumberRef valueRef = CFDictionaryGetValue(dict, CFSTR("text.html"));

    //get value based on key
int valuePtr;
CFNumberGetValue(valueRef, kCFNumberSInt32Type, (void *)&valuePtr);
    printf("value: %d\n", valuePtr);

1 个答案:

答案 0 :(得分:1)

使用CFMutableDictionaryRef作为参数创建的&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks期望Core Foundation类型为键和值,因为它会尝试保留/释放它们(使用CFRetain / CFRelease)。

您应该使用CFStringRefCFNumberRef代替纯C类型(或者,指定其他keyCallBacksvalueCallBacks,可能NULL)。