Цель C - NSInvocation передачи себя в качестве отправителя? - PullRequest
1 голос
/ 19 июля 2011

Я пытаюсь использовать NSInvocation для вызова метода объекта и отправки sender в качестве аргумента. Приведенный ниже код вызывает mthod, но кажется, что объект, передаваемый в mthod, на самом деле не является самообъектом

- (void)setTarget:(id)taret withAction:(SEL)selector
{
    NSMethodSignature *methodSignature = [target methodSignatureForSelector:action];
    _invocation = [[NSInvocation invocationWithMethodSignature:methodSignature] retain];

    _invocation.target = target;
    _invocation.selector = action;
    [_invocation setArgument:self atIndex:2];
}

- (void)callTargetWithSender
{
   [_invocation invoke];
}

Ответы [ 3 ]

2 голосов
/ 09 января 2014

[вызов setArgument: (__boid void *) (self) atIndex: 2];

2 голосов
/ 19 июля 2011

См. «Использование NSInvocation» в Руководство по программированию распределенных объектов .


РЕДАКТИРОВАТЬ НА ОСНОВЕ НОВОГО ВОПРОСА *

Я предполагаю, что выше будет называться так:

[foo setTarget:target withAction:@selector(doSomething:)];

В этом случае последнее сообщение будет:

[target doSomething:foo];
1 голос
/ 19 июля 2011

Почему бы вам просто не использовать

   [target performSelector:selector withObject:self];

??? Когда selector равно @selector(foo:), это эквивалентно

   [target foo:self];

NSInvocation в вашей ситуации, на мой взгляд, излишество.

...