3

I've a class method which is not declared in the h file, but implemented in the m file. now I want to call it in another class, since the return value is a int, I can't use selector directly, so I use NSInvocation.

below is what i'm doing:

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];

the invoke doesn't succeed, Why?

Jerrylk
  • 379
  • 5
  • 19

1 Answers1

3

When passing the arguments, you pass their address, not their value. Try the following:

[invocation setArgument:&arg
                atIndex:2];

See [NSInvocation setArgument:atIndex:] in the class reference.

trojanfoe
  • 120,358
  • 21
  • 212
  • 242