[__NSCFString setView:]: 无法识别的选择器发送到实例 0x8292720
Posted
技术标签:
【中文标题】[__NSCFString setView:]: 无法识别的选择器发送到实例 0x8292720【英文标题】:[__NSCFString setView:]: unrecognized selector sent to instance 0x8292720 【发布时间】:2013-02-17 08:50:03 【问题描述】:我将 searchBar 和 searchDisplayController 放在作为主标签栏的标签栏中。 当我通过推送打开新的视图控制器时没有问题。
mainTabbar -> navigationController+searchController -(push after rowdidselect)-> newVC -(push)-> newVC -(push)-> ...
但是当我做一些现在的模态时。
mainTabbar -> navigationController+searchController -(push after rowdidselect)-> newVC -(modal)-> newVC
然后返回搜索结果
mainTabbar -> 导航控制器+搜索控制器
我无法再次推送 newViewController 并收到以下错误:
[__NSCFString setView:]: unrecognized selector sent to instance 0x8292720
我怎么了?所有结果都只是告诉我有关手势识别器的信息。
::启用僵尸后,我收到了这条消息
-[UITapGestureRecognizer retain]:消息发送到deallocated instance 0xfcd83b0
我猜想在 searchDisplayController 表的单元格中的 TapGestureRecognizer 已被释放。 有谁知道如何留住他们???
【问题讨论】:
【参考方案1】:您并没有真正提供有关您的案例的太多信息,但通常是错误日志:
[__NSCFString setView:]: unrecognized selector sent to instance 0x8292720
表示您试图将setView
消息发送到NSString
类型的错误对象。
既然你说你的代码在一种情况下工作,我认为这不是你将消息发送到错误对象的问题。相反,这与被释放的正确对象有关,并且它的内存被重用于NSString
对象(然后接收消息)。
我怀疑关键可能在于您如何返回搜索结果,但您应该提供更多代码让我们了解正在发生的事情。
【讨论】:
对于模态我使用dismissmodalViewController 进行push-pop 我使用dismissViewController 关闭ViewController ::在我启用僵尸后我收到这条消息-[UITapGestureRecognizer retain]:message sent to deallocated instance 0xfcd83b0 嗯,这证实了我的假设。你能展示你如何以及在哪里创建手势识别器吗?我想你的控制器(包含手势识别器)已被释放,但附加到它的视图仍然存在(它没有从其超级视图中删除),所以它不断向识别器发送消息......但没有看到更多代码,我不能多说…… 对于push-pop,你为什么用'dismissViewController'而不是'popViewControllerAnimated:'来关闭视图控制器? @RenoJones:+1,我完全监督了这一点!这肯定是错误的,尽管对于 OP 来说 push/pop 似乎工作正常...... RenoJones 好的,我现在就解决这个问题。 @sergio 我没有创建任何 GestureRecognizer。我只是使用了 didSelectRowAtIndexpath 并在完成此方法中的所有操作后崩溃。以上是关于[__NSCFString setView:]: 无法识别的选择器发送到实例 0x8292720的主要内容,如果未能解决你的问题,请参考以下文章
NSMutableDictionary 转换成 __ NSCFString
Swift - 无法将“__NSCFString”类型的值转换为“NSDictionary”
__NSCFString objectForKeyedSubscript: 异常
如何解决 [__NSCFString _isResizable] 的运行时错误:无法识别的选择器发送到实例?