我看到很多Objective-C / Cocoa SDK apis,您可以在其中指定目标和将被回调的动作。
我想在我的两个类中做同样的事情,但是当我存储传入的选择器并稍后尝试调用它时,我得到了异常,
“无法识别的选择器已发送至 实例“
我将目标和行动传递给ClassB:
[myClassB doSomething:self action:@selector(anAction:)];
ClassB被声明并实现为:
@interface ClassB
{
id target;
SEL targetAction;
}
@implementation ClassB
-(void)theWork {
if ( [target respondsToSelector:targetAction] )
{
[target targetAction];
}
}
在构建过程中,我还收到以下警告:
找不到'-targetAction'方法
如何调用提供的目标操作?
我想要达到的目的与此类似:
UIBarButtonItem *cancelButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel
target:self
action:@selector(cancelItem:)];
答案 0 :(得分:4)
[target targetAction];
表示运行名为targetAction的方法。
你想要
[target performSelector:targetAction];
答案 1 :(得分:0)
您需要将选择器名称存储在ivar中:
ClassB *b = [[ClassB alloc] init];
SomeOtherClass *a = [[SomeOtherClass alloc] init];
// next two lines require properties to be declared
b.target = a;
b.targetAction = @selector(doTask:);
现在在ClassB中,您可以使用
调用方法[target performSelector:targetAction withObject:someObject];
那会调用
- (void)doTask:(id)object