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

标签 ios objective-c

在 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/

相关文章:

iphone - 在 Objective-C 中选择一个随机枚举

ios - 支持 iOS7 和 iOS8 时的 Storyboard启动图像

objective-c - Autolayout 不适用于带有 Storyboard 的 NSSplitView 和 NSPageController。这是苹果虫吗?

objective-c - 2 应该相等的 NSDates 不是吗?

ios - 在通用 iOS 应用程序中使用 Storyboard 的 UISplitView

ios - 使用AVAudioRecorder计量制作三角波

ios - If 语句输出两个参数而不是其中一个?

ios - 在 App-Store 中构建卡片高亮动画

iOS - 多通知扩展服务?

iphone - 应用程序中的帮助菜单