2013-05-14 95 views
3

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

的调用将不会成功,为什么呢?

+1

如果你想调用它在另一个比它不应该在.h以及.. ..? – 2013-05-14 11:58:54

+1

“调用不能成功”什么“不成功”呢? – newacct 2013-05-14 19:44:54

+0

@newacct谢谢 – Jerrylk 2013-05-15 02:06:57

回答

3

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

[invocation setArgument:&arg 
       atIndex:2]; 

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

+0

我试过但失败了,实际上这个参数是一个(NSDate *),没有必要使用'&' – Jerrylk 2013-05-15 02:10:57

+0

@Jerrylk看看我提供的链接的例子,它也传递一个对象并使用'&'。 – trojanfoe 2013-05-15 18:11:00

+0

谢谢,我解决了这个问题,使用&arg。 – Jerrylk 2013-05-16 08:35:27