2

我正在尝试[NSMutableDictionary dictionaryWithObjects:frames forKeys:items]使用 CFDictionary 来实现,因此我可以控制键和值回调。这就是我所拥有的:

__unsafe_unretained id keys[itemCount];
[items getObjects:keys range:NSMakeRange(0, itemCount)];
__unsafe_unretained id values[itemCount];
[frames getObjects:values range:NSMakeRange(0, itemCount)];
CFDictionaryCreate(kCFAllocatorDefault, (const void **)keys, (const void **)values, itemCount, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);

这给出了以下错误:Cast of an indirect pointer to an Objective-C pointer to 'const void **' is disallowed with ARC

我尝试了各种桥接排列,但我似乎无法毫无怨言地编译它。

非常感谢任何帮助!

4

3 回答 3

5

我也无法找到它的语法。(编辑:贾斯汀的答案有语法。)试试这个:

void *keys[itemCount];
[items getObjects:(__unsafe_unretained id *)(void *)keys range:NSMakeRange(0, itemCount)];

然后,当您调用CFDictionaryCreate.

于 2012-04-23T06:58:56.093 回答
1

此时您可以简单地将其转换void*为:

CFDictionaryRef d = CFDictionaryCreate(kCFAllocatorDefault,
                        (void*)keys,
                        (void*)values,
                        itemCount,
                        &kCFTypeDictionaryKeyCallBacks,
                        &kCFTypeDictionaryValueCallBacks);

您也可以考虑这种方法:

const void* keys[itemCount];
CFArrayGetValues((__bridge CFArrayRef)items, CFRangeMake(0, itemCount), keys);
const void* values[itemCount];
CFArrayGetValues((__bridge CFArrayRef)frames, CFRangeMake(0, itemCount), values);

CFDictionaryRef d = CFDictionaryCreate(kCFAllocatorDefault,
                                       keys,
                                       values,
                                       itemCount,
                                       &kCFTypeDictionaryKeyCallBacks,
                                       &kCFTypeDictionaryValueCallBacks);
于 2012-04-23T07:25:34.313 回答
0

试试(__bridge const void **)keys

于 2012-04-23T01:42:25.133 回答