Objective C - NSInvocation将self作为发送者传递?

时间:2011-07-19 02:52:34

标签: iphone objective-c nsinvocation

我正在尝试使用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 个答案:

答案 0 :(得分:2)

请参阅Distributed Objects Programming Guide中的“使用NSInvocation”。


基于新问题进行编辑*

我假设上面会这样调用:

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

在这种情况下,最终的消息将是:

[target doSomething:foo];

答案 1 :(得分:2)

[invocation setArgument:(__ bridge void *)(self)atIndex:2];

答案 2 :(得分:1)

为什么不使用

   [target performSelector:selector withObject:self];

???当selector@selector(foo:)时,这相当于

   [target foo:self];
在我看来,

NSInvocation在你的情况下是一种矫枉过正。