2011-03-07 41 views
3

下面的代碼按預期工作:如何從NSInvocation獲取NSString結果?

NSLog(@"%@", [NSString stringWithString:@"test"]; // Logs "test" 

但是,當我與NSInvocation取代它,我得到一個完全不同的結果:

Class class = [NSString class]; 
SEL selector = @selector(stringWithString:); 

NSInvocation *invocation = [NSInvocation invocationWithMethodSignature: 
          [class methodSignatureForSelector:selector]]; 
[invocation setTarget:class]; 
[invocation setSelector:selector]; 
[invocation setArgument:@"test" atIndex:2]; 
[invocation invoke]; 

id returnValue = nil; 
[invocation getReturnValue:&returnValue]; 
NSLog(@"%@", returnValue); // Logs "NSCFString" 

我已經搜查高有低,但找不出這一點。任何幫助?謝謝!

回答

7

從NSInvocation的類引用:

當參數值是一個對象,將指針傳遞到可變(或存儲器),從該對象應該被複制:

NSArray *anArray;  
[invocation setArgument:&anArray atIndex:3]; 

由於@」測試「實際上是構建一個NSString的實例,您應該使用

NSString *testString = @"test"; 
[invocation setArgument:&testString atIndex:2]; 
+0

謝謝,謝謝,謝謝!我完全看錯了。很長一段時間。 – 2011-03-07 19:47:39