无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】无法识别的选择器发送到实例【英文标题】:unrecognized selector sent to instance 【发布时间】:2013-11-18 13:53:01 【问题描述】:

我在选择通知方法时遇到问题。

在初始化中我已经定义了这个:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(stopSyncIndicator:) name:ios_STOP_SYNC_INDICATOR object:nil];

该方法在标头和相同的实现中都已定义:

-(void)stopSyncIndicator

    [indicator stopAnimating];

但是,当其他班级发布此通知时:

NSNotification *note = [NSNotification notificationWithName:IOS_STOP_SYNC_INDICATOR object:nil];
[[NSNotificationCenter defaultCenter] postNotification:note];

天崩地裂:

[FTRecordViewController stopSyncIndicator:]: unrecognized selector sent to instance 0x8d3bc00
2013-11-18 13:47:06.994 [1835:70b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[FTRecordViewController stopSyncIndicator:]: unrecognized selector sent to instance 0x8d3bc00'
*** First throw call stack:
(
    0   CoreFoundation                      0x01bf75e4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x018f88b6 objc_exception_throw + 44
    2   CoreFoundation                      0x01c94903 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275

知道这里发生了什么吗?

【问题讨论】:

How can I debug 'unrecognized selector sent to instance' error的可能重复 【参考方案1】:

你的选择器有一个: 表示它会接受一个参数,你的实现不会

要么

@selector(stopSyncIndicator) //no :

-(void)stopSyncIndicator:(NSNotification *)notification //accept argument 

会解决这个问题

【讨论】:

【参考方案2】:

你告诉观察者的选择器有一个参数:

[nc addObserver:self selector:@selector(stopSyncIndicator:) name:IOS_STOP_SYNC_INDICATOR object:nil];`<br/>

你的选择器没有参数:

-(void)stopSyncIndicator

要解决此问题,请从 selector:@selector(stopSyncIndicator:) 中删除 : 或将您的方法签名设置为:

-(void)stopSyncIndicator:(NSNotification *)notification

【讨论】:

以上是关于无法识别的选择器发送到实例的主要内容,如果未能解决你的问题,请参考以下文章

快速代码崩溃:“发送到实例的无法识别的选择器”

Swift 3:将无法识别的选择器发送到手势识别器实例

无法识别的选择器发送到实例,UISlider swfit3

UITableViewController 无法识别的选择器发送到实例

无法识别的选择器发送到实例

[UICollectionViewCell imageView]:无法识别的选择器发送到实例