如何从NSInvocation获取一个NSString结果?

3
以下代码按预期工作:
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"

我已经四处查找,但还是无法弄明白。有人可以帮忙吗?谢谢!

1个回答

7

来自NSInvocation类的参考文档:

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

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

由于@"test"实际上是构造NSString的一个实例,因此您应该使用

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

谢谢,谢谢,非常感谢!我完全看错了。很长一段时间。 - Hilton Campbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接