"unrecognized selector sent to instance"
中的Xcode
是什么意思?
这意味着方法未定义,或者相反,在错误的对象上调用方法。
此错误的经典示例是选择器调用中缺少“:”。
UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self
action:@selector(DatePickerDoneClick)];
这里,
action:@selector(DatePickerDoneClick:)
是预期的而不是
action:@selector(DatePickerDoneClick)
如果您在情节提要上删除并重新创建了按钮,则该按钮可能会链接到两种不同的方法:旧的(已删除的)方法和新的方法。这种事在我身上发生过很多次。
修复: 1) 在 XCode/IB 中,查看 Storyboard。 2) 单击导致异常的按钮。 3) 在最右侧面板上,单击“连接器”图标。 (一个带有箭头的圆圈,截至 2015 年 4 月)。 4) 假设您要链接到“Touch Up Inside”操作,请确保仅链接一种方法。每个旁边都会出现一个 [x],所以如果有两个,请杀死不再存在的那个。
就我而言,这意味着我(两天)不理解处理程序(选择器、函数)的一个非常简单的要求: 我在我的选择器(函数)中遗漏了 ...:(NSNotification*)notification...。
最终这只是一个 self.stupidMistake(或者在尝试理解 iOs/xCode 中的新事物时编程疲倦)。我阅读了苹果的文档,我在 stackoverflow 上阅读了很多很多,并从搜索结果中阅读了各种其他页面,但一直忽略了我所拥有的事实: 在viewDidLoad中:
[[NSNotificationCenter defaultCenter] addOberserver:self selector:@selector(myHandler:) name:@"UIApplicationWillResignActiveNotification" object:nil];
在我发明的.h(声明)和.m(真实代码)中:
-(void)myHandler { ... }
这会在运行时生成发送到实例的无法识别的选择器(崩溃和调试输出)(xcode 中没有错误或警告)。然后我花了几乎整整两天的时间试图找出错误,错误是:
-(void)myHandler:(NSNotification*)notification { ... }
希望它能帮助其他陷入困境的人 - 这是一个语法问题(你的选择器或处理程序或函数或任何你想称呼它的东西)必须将(NSNotification *)“对象”作为参数,无论你是否使用它;并且 xcode(4.2 w/iOs SDK 5.0)不会生成有关此“错误”的任何错误或警告。
我认为这个错误是由于调用类中未在类中声明的函数造成的。
这意味着您在不支持该方法的对象上调用了该方法。
之所以说“无法识别的选择器”是因为方法调用是通过消息发送机制实现的。消息中包含方法名称的部分称为选择器。
我认为是当您在不属于该实例的方法实例上调用选择器时。 也许我错了,我不确定,自从我在 xcode 中编写任何代码以来已经有一段时间了。
对我来说只是
Xcode
不去编译代码。 Apple 显然认为 iOS 开发不够复杂,因此他们必须在 IDE 中构建额外的脆弱性。
我听说
SHIFT+COMMAND+K
清理构建会有很大帮助。
由于没有将自定义类分配给界面生成器中的视图,我收到了此错误。
NSArray *subviewArray = [[NSBundle mainBundle] loadNibNamed:@"EventsFilterView" owner:self options:nil];
self.filters = [subviewArray objectAtIndex:0];
变量
self.filters
已分配给 EventFilterView
类,但 xib 文件中的实际视图并未分配。
希望这对某人有帮助。
发生这种情况的原因有多种:
ONE:该方法在.h中声明,但在.m中不存在。编译器不会抱怨,但在执行过程中你会遇到崩溃。请检查一下:
二:如果调用委托方法,请检查该方法是否真正实现。
我以前修改签名的时候也出现过这个错误,但是我忘记更新实现文件.m上的签名方法了
我遇到了类似的问题,问题是包含未知选择器的“.m”类不在“构建阶段/编译源”列表中。 我添加了它,一切都修复了。
迟到的答案,但我在这个问题上被困了好几天,对我来说,正如哈维尔提到的,我的签名略有不同,因为我在故事板中使用的视图控制器中添加了抛出到我的@IBAction函数。