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

Iphone 如何使用NSInvocation调用类方法?,iphone,nsinvocation,Iphone,Nsinvocation,我有一个类方法,它不是在h文件中声明的,而是在m文件中实现的。 现在我想在另一个类中调用它,因为返回值是int,我不能直接使用选择器,所以我使用NSInvocation 下面是我正在做的事情: SEL selector = ***; NSMethodSignature *signature = [classA methodSignatureForSelector:selector]; NSInvocation *invocation = [NSInvocation invocationWithM

我有一个类方法,它不是在h文件中声明的,而是在m文件中实现的。 现在我想在另一个类中调用它,因为返回值是int,我不能直接使用选择器,所以我使用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];

调用没有成功,为什么?

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

[invocation setArgument:&arg
                atIndex:2];

请参阅类引用中的内容。

如果您想在另一个调用中调用它,而不是在.h中调用它……?“调用不能成功”关于它的“不成功”是什么?@AnkitSrivastava我正在做一个单元测试,该方法不应该在外部调用,因为它是关闭的。我尝试了,但失败了,事实上该参数是(NSDate*),没有必要使用'&'@Jerrylk看看我提供的链接中的示例,它也传递一个对象并使用
&
。谢谢,我解决了这个问题,使用&arg。