objective-c - 将 '__unsafe_unretained id *' 转换为 'const void **'

标签 objective-c ios automatic-ref-counting

我正在尝试实现 [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);

这会产生以下错误:ARC 不允许将指向“const void **”的 Objective-C 指针的间接指针强制转换

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

非常感谢任何帮助!

最佳答案

我也找不到相应的语法。 (编辑:贾斯汀的回答有语法。)试试这个:

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

那么在调用 CFDictionaryCreate 时就不需要强制转换了。

关于objective-c - 将 '__unsafe_unretained id *' 转换为 'const void **',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10273833/

相关文章:

ios - 如何将选择器中的值设置为特定部分的自定义单元格文本字段?

objective-c - 运行时编程动态方法时使用 ARC 编译时出错

ios - 使用自定义字体时,带有 secureTextEntry 的 UITextField 中项目符号的大小会随着焦点切换而改变大小

objective-c - NSMutableArray : replaceObjectAtIndex vs assignment

objective-c - ARC时代的属性(property)与ivar

iphone - 使用带有 ARC 的 ios5 选择地址簿地址

ios - PKPaymentAuthorizationViewController 在 iOS 8.4 上意外崩溃

ios - 使用 UIGraphicsImageRenderer 绘制图像时为什么要使用大量内存?

ios - 有没有办法为 AVSpeechSynthesisVoice 切换语音性别?

javascript - 无法将数据存储在 ionic ios 的本地存储中