如何使用NSInvocation来调用类方法?

3

我有一个类方法,没有在头文件中声明,但是在实现文件中实现了。现在我想在另一个类中调用它,由于返回值是int类型,不能直接使用selector,所以我使用了NSInvocation。

下面是我的操作:

SEL selector = ***;
NSMethodSignature *signature = [classA methodSignatureForSelector:selector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
invocation.selector = selector;
invocation.target = [classA class];
[invocation setArgument:(void *)arg atIndex:2];
[invocation invoke];

为什么 Invoke 没有成功执行?


1
如果你想在另一个地方调用它,那么它不应该也在.h文件中吗? - Ankit Srivastava
1
调用无法成功,它的哪个方面“不成功”? - newacct
@AnkitSrivastava 我正在进行单元测试,这些方法不应该在外部被调用。 - Jerrylk
1
这个被关闭了,真是搞笑。 - mxcl
1个回答

3

在传递参数时,您传递的是它们的地址,而不是它们的值。请尝试以下操作:

[invocation setArgument:&arg
                atIndex:2];

请参阅类引用中的[NSInvocation setArgument:atIndex:]


我尝试过但失败了,实际上参数是一个(NSDate *),使用“&”是不必要的。 - Jerrylk
@Jerrylk,请查看我提供的链接中的示例,它还传递了一个对象并使用了& - trojanfoe

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