Ios 在NSInvocation中为具有可变参数的方法传递多个参数

Ios 在NSInvocation中为具有可变参数的方法传递多个参数,ios,objective-c,macos,Ios,Objective C,Macos,我有一个方法,它接受类似这样的变量参数,参数以nil结尾 -(void)manyParams:(NSString *)st, ... { va_list argList; va_start(argList,st); id obj; while ((obj = va_arg(argList, id))) { NSLog(@"%@",obj); } va_end(argList); return; } 我可以这样直接称呼

我有一个方法,它接受类似这样的变量参数,参数以nil结尾

-(void)manyParams:(NSString *)st, ... {
    va_list argList;
    va_start(argList,st);

    id obj;

    while ((obj = va_arg(argList, id))) {
        NSLog(@"%@",obj);
    }
    va_end(argList);

    return;
}
我可以这样直接称呼它

[self manyParams:@"one",@"two",@"three",nil];
如果我正在使用
NSInvocation
类来调用多个参数,那么我该怎么做呢

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:self];
[invocation setSelector:@selector(manyParams:)];
///NSString *one = @"one";
///[invocation setArgument:&one atIndex:2]; //////How to pass variable arguments like @"one",@"two",@"three", nil
[invocation invoke];

NSInvocation不支持可变方法,因此这是不可能的。(参考资料:)


NSInvocation不支持使用以下两种方法调用方法: 可变数量的参数或联合参数

如果该方法有一个替代版本,它采用
va_列表
,并且您的所有参数都是对象指针,那么您可能会伪造一些东西,如我在这里的回答中所示:

C unions。见: