在 UIViewController 的一个简单子(monad)类中,我只是实现了一个选择器作为刷新 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”调用它,它会抛出异常“unrecognized selector”
我在网上搜索了一下,没有出现“:”或 nil 的错误;
我把选择器的声明放在了头文件中,但是没有用。
我重新启动了 Mac 和 iPhone,但结果相同。
这是一个简单的类,我没有在其中重新实现 respondsToSelector: 选择器。
那么,我是否错误地使用了 respondsToSelector?我只想在这个类之外进行回调。
环境:Mac OS X 10.11.3、Xcode 7.2.1、iOS 9.2.1
更新:没有匹配大小写的 find(cmd+F) 隐藏了 f/F 问题。感谢基兰!
最佳答案
应该是
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”
关于ios - respondsToSelector 无法识别已实现的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36148044/