2013-05-14 5 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

«вызов не может быть успешным», что «не удается»? – newacct

+0

@newacct спасибо – Jerrylk

ответ

3

При передаче аргументов вы передаете свой адрес, а не их значение. Попробуйте следующее:

[invocation setArgument:&arg 
       atIndex:2]; 

См. [NSInvocation setArgument:atIndex:] в описании класса.

+0

Я попытался, но не смог, на самом деле аргумент является (NSDate *), нет необходимости использовать «&» – Jerrylk

+0

@Jerrylk, чтобы посмотреть пример в предоставленной мне ссылке, которая также передает объект и использует '&'. – trojanfoe

+0

спасибо, я исправил проблему, используйте & arg. – Jerrylk