错误"无法识别的选择器发送到实例"在Xcode中意味着什么

Was*_*sim 15 xcode

这是什么意思"unrecognized selector sent to instance"Xcode

小智 17

这意味着,方法没有定义,或者在另一方面,在错误的对象上调用方法.

选择器调用中缺少":"的错误的典型示例.

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc]
initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self
                action:@selector(DatePickerDoneClick)];
Run Code Online (Sandbox Code Playgroud)

这里,

action:@selector(DatePickerDoneClick:)
Run Code Online (Sandbox Code Playgroud)

是预期而不是

action:@selector(DatePickerDoneClick)
Run Code Online (Sandbox Code Playgroud)


小智 9

如果您已经在故事板上删除并重新创建了按钮,则可以将按钮链接到两种不同的方法:旧(已删除)和新(新).这种情况多次发生在我身上.

要修复:1)在XCode/IB中,查看故事板.2)单击导致异常的按钮.3)在最右侧面板上,单击"连接器"图标.(截至2015年4月的一个带箭头的圆圈).4)假设您正在链接到"Touch Up Inside"动作,请确保仅链接一个方法.每个旁边都会出现[x],所以如果有两个,则杀死不再存在的那个.


小智 6

在我的情况下,这意味着我不理解(两天)一个非常简单的处理程序要求(选择器,函数):我在我的选择器(函数)中放弃了... :(NSNotification*)通知 ... .

最后它只是一个self.stupidMistake(或者在尝试理解iOs/xCode中的新东西时编程很累).我在apple阅读了文档,我在stackoverflow上阅读了很多很多文章,并从搜索结果中读取了各种其他页面,并且只是忽略了我的事实:在viewDidLoad中:

[[NSNotificationCenter defaultCenter] addOberserver:self selector:@selector(myHandler:) name:@"UIApplicationWillResignActiveNotification" object:nil];
Run Code Online (Sandbox Code Playgroud)

在我发明的.h(声明)和.m(真实代码)中:

-(void)myHandler { ... }
Run Code Online (Sandbox Code Playgroud)

这会在运行时生成无法识别的选择器(崩溃和调试输出)(xcode中没有错误或警告).然后我花了差不多两天时间试图弄清楚错误,错误是:

-(void)myHandler:(NSNotification*)notification { ... }
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助其他人卡住 - 这是一个语法事物(你的选择器或处理程序或函数或任何你想要调用的东西)必须将(NSNotification*)'对象'作为参数,无论你是否使用它; 和xcode(4.2 w/iOs SDK 5.0)不会产生任何有关此"错误"的错误或警告.


Pgm*_*eek 5

我认为这个错误是由于在类中调用了一个没有在类中声明的函数。


Nic*_*ore 5

这意味着您已在不支持该方法的对象上调用了方法.

它说'无法识别的选择器'的原因是方法调用是由消息发送机制实现的.包含方法名称的消息部分称为选择器.