iPhone:“无法识别的选择器已发送到实例”错误

Posted

技术标签:

【中文标题】iPhone:“无法识别的选择器已发送到实例”错误【英文标题】:iPhone: “Unrecognized Selector Sent to Instance” Error 【发布时间】:2010-06-03 20:48:45 【问题描述】:

我正在尝试使用 ramin.firoozye.com 上“iPhone 上的半模态(透明)对话框”中的代码在我的应用程序中实现部分覆盖模式。覆盖功能有效,它将模态框滑入视图,但从模态框的控制器调用任何 IBAction 都会导致“无法识别的选择器发送到实例”崩溃。

我用隔离的代码重新创建了基本功能,它触发了同样的错误。想看我在说什么,你可以download the test project here。

我确定我只是在这里遗漏了一些简单的东西。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

当在 TestViewController displayModal: 中显示您的 ModalViewController 时,您会释放您的 modalController(第 20 行)。不要这样做 - 你需要 ViewController 才能保持活力。如果释放它,只有视图保持活动状态(因为它在添加为子视图时会保留)。

另外,在 ModalViewController hideModalEnded 中,你释放了你没有保留的 modalView,所以我也会删除那个。

所以现在你只需要在视图被移除后释放 ModalViewController 的实例。你可以通过[自我释放]来做到这一点;在 hideModalEnded 中,但这似乎是一个不寻常的模式,我觉得这样做不太好。

一些建议:

将显示和隐藏方法保留在 同班。 随身携带一个 ivar 控制器。 另一种可能性:删除 ModalViewController 完全和 将所有内容都放在 TestViewController 中 - 但这在很大程度上取决于实际操作中会发生多少动作。

【讨论】:

哈!那很简单。感谢您为我节省了数小时的调试时间! 相同的测试应用程序,新的错误。不确定这是否与发布有关,但如果您打开模式并再次将其关闭 7 次,则第 8 次将使应用程序崩溃。调试器显示“EXC_BAD_ACCESS”。 抱歉,混淆了视图和控制器,并且版本通过了...我不知道为什么它在第 8 次化身中一直失败。 感谢您的跟进! [自我释放] 修复它。我认为该视图没有从内存中清除,并且在堆积了足够多的视图之后,它就崩溃了。在我的真实应用程序中,视图在 3 次后崩溃,因为模式包含更多元素。您提到一个更好的方法是将显示和隐藏方法放在同一个类中。我想这样做,但不知道如何将隐藏方法连接到关闭按钮,当它出现在单独的 xib 文件中时。该模态视图在实际应用程序中相当复杂,因此它需要自己的控制器和 xib。再次感谢!

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

[[NSCFString objectForKey:]:无法识别的选择器已发送到实例

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSCFString objectForKey:]:无法识别的选择器已发送到实例

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFType next]:无法识别的选择器已发送到实例”

使用 NSTimer 时发送到实例的无法识别的选择器

[NSCFArray 长度]:发送到实例的无法识别的选择器

错误:UIButton 上的索引路径 (Swift)