0

我有以下问题。

我有一个 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 数组的内容。有什么办法可以做到这一点?

4

1 回答 1

3

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

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

所以试试这个...

id argument = [args objectAtIndex: i];
[invocationObj setArgument:&argument atIndex: i+2];
于 2013-10-23T15:20:15.563 回答