我一直在尝试将一个委托写入一个视图控制器,该控制器有一个方法可以在完成后回调发件人
-(void) doSomething:(id)target action:(SEL)action object:(id)object{
//Do Some work
//Produce an NSArray* called array
object = array;
if([target respondsToSelector:action])
{
[target action];
}
}
这个想法是发送方中的action方法也有对象的引用,它可以读取结果并在调用选择器以使用数据后执行某些操作。
我遇到的问题是[target respondsToSelector:action]返回true,因此代码尝试调用选择器,然后我得到一个SIGABRT信号和NSObject -doesNotRegogniseSelector的消息。
有谁知道我哪里出错了?
答案 0 :(得分:4)
尝试:
[target performSelector:action];
键入[target action]
不是如何动态调用方法。这就像打电话给[anObject @selector(doSomething)]
。此外,可能不需要检查target
是否响应selector
,因为您的方法被作为参数调用,并且调用者的部分传入错误的选择器是错误的。
答案 1 :(得分:2)
您应该使用- (id)performSelector:(SEL)aSelector
来调用选择器。