我正在尝试使用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];
}
答案 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
在你的情况下是一种矫枉过正。