2013-08-01 83 views
3

我有一個方法,它採用類似這樣的可變參數,參數以nil結尾。在NSInvocation中傳遞帶有可變參數的方法的多個參數

-(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; 
} 

我如果我使用NSInvocation類調​​用manyParams話,我怎麼能做到這一點

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]; 

回答

4

NSInvocation的不支持可變參數的方法直接調用它

[self manyParams:@"one",@"two",@"three",nil]; 

,所以這是不可能的。 (參考:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSInvocation_Class/Reference/Reference.html

NSInvocation的不支持的與參數或聯合參數要麼 可變數量的方法的調用。

如果有方法的替代版本,需要一個va_list和所有的參數都是對象指針,你也許可以在這裏在我的答案假的東西了,如:fake va_list in ARC

+0

」 ..union參數「 - 那是什麼? –

+0

C聯合。請參閱:https://www.tutorialspoint.com/cprogramming/c_unions.htm – ipmcc

+0

瞭解它,謝謝@ipmcc –

相關問題