respondsToSelector无法识别已实现的选择器

时间:2016-03-22 07:02:21

标签: ios objective-c

在UIViewController的一个简单子类中,我只是将一个选择器实现为一个回调来刷新UI

-(void)afterfollowAction:(id)object{
  //blabla
}

但最后我发现respondsToSelector无法识别它。测试代码:

SEL callback = @selector(afterFollowAction:);
BOOL test1 = [self respondsToSelector:callback]; //NO
BOOL test2 = [self respondsToSelector:@selector(afterFollowAction:)]; //NO
BOOL test3 = [[self class] instanceMethodForSelector: @selector(afterFollowAction:)];  //YES
BOOL test4 = [self respondsToSelector:@selector(viewWillDisappear:)]; //YES
[self performSelector:callback withObject:nil]; //crash

test2显示的不是局部变量回调的问题,

test4表明它知道它是一个UIViewController而且self不是nil

test3显示它实际上知道选择器已实现

但如果你用" performSelector"来调用它。它抛出异常"无法识别的选择器"

我在网上搜索过,并没有在":"或者没事;

我将选择器的声明放在头文件中,但没有用。

我重新启动了Mac和iPhone,但结果相同。

这是一个简单的类,我没有重新实现respondsToSelector:selector。

那么,我是否错误地使用了respondsToSelector?我只是想在这堂课之外做回调。

环境:Mac OS X 10.11.3,Xcode 7.2.1,iOS 9.2.1

更新:查找(cmd + F)没有匹配案例隐藏f / F问题。感谢Kiran!

1 个答案:

答案 0 :(得分:1)

应该是

SEL callback = @selector(afterfollowAction:);
BOOL test1 = [self respondsToSelector:callback]; //NO
BOOL test2 = [self respondsToSelector:@selector(afterfollowAction:)]; //NO
BOOL test3 = [[self class] instanceMethodForSelector: @selector(afterfollowAction:)];  //YES
BOOL test4 = [self respondsToSelector:@selector(viewWillDisappear:)]; //YES
[self performSelector:callback withObject:nil]; //crash

您正在使用资本" F"