使用NSInvocation setArgument:从NSArray返回的值

时间:2013-10-23 15:13:44

标签: ios objective-c

我有以下问题。

我有一个值的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数组的内容。有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

您需要将指针位置传递到setArgument:atIndex:。具体来说,这部分来自docs

  

当参数值是一个对象时,将指针传递给应该从中复制对象的变量(或内存):

所以试试这个......

id argument = [args objectAtIndex: i];
[invocationObj setArgument:&argument atIndex: i+2];