我有以下问题。
我有一个值的NSArray,我需要循环并将内容设置为NSInvocation对象的相应参数。请考虑以下代码:
NSArray *args = @[@"test"];
以后我想做点什么:
for ( i = 0; i < [args count]; i++)
{
[invocationObj setArgument: [args objectAtIndex: i] atIndex: i+2];
}
但这不起作用。它给出了以下警告:
Implicit conversion of Objective-C pointer type 'id' to C pointer type 'void *' requires a bridged cast
调用对象是动态的(对于目标/选择器和args),因此当我设置相应invocationObj的参数时,我不知道args数组的内容。有什么方法可以实现这个目标吗?
答案 0 :(得分:3)
您需要将指针位置传递到setArgument:atIndex:
。具体来说,这部分来自docs
当参数值是一个对象时,将指针传递给应该从中复制对象的变量(或内存):
所以试试这个......
id argument = [args objectAtIndex: i];
[invocationObj setArgument:&argument atIndex: i+2];