2013-05-14 2 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에 있지 않아야 다른 것에서 호출하고 싶다면 .. ..? –

+1

"invoke는 성공할 수 없습니다"무엇이 "성공하지 못합니까?" – newacct

+0

@newacct 감사합니다. – Jerrylk

답변

3

인수를 전달할 때 값이 아닌 주소를 전달합니다. 다음을 시도하십시오.

[invocation setArgument:&arg 
       atIndex:2]; 

클래스 참조에서 [NSInvocation setArgument:atIndex:]을 참조하십시오.

+0

나는 시도했지만 실패했다. 실제로 인수는 (NSDate *)이고, '&' – Jerrylk

+0

@Jerrylk을 사용하여 필자가 제공 한 링크의 예제를 볼 필요가 없다. 또한 객체를 전달하고'&'를 사용한다. – trojanfoe

+0

감사합니다. 문제를 해결하고 arg를 사용합니다. – Jerrylk