在UITextView中从菜单中选择和删除文本时崩溃

时间:2011-11-08 17:20:29

标签: cocoa-touch uitextview uimenucontroller

我的UITextViews在文本选择和删除时使应用程序崩溃。

enter image description here

剪切,复制和粘贴似乎工作正常。日志中唯一的错误是:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIMenuController view]: unrecognized selector sent to instance 0xff85ac0'

这是一个普通的UITextView,UIMenuController不受影响且未经过自定义。有什么想法吗?

在模拟器和设备上使用iOS 4.3和5.0。

除了我需要解释的堆栈跟踪之外,没有更多关于僵尸启用的信息。新Xcode对此并不好:

(0x356338bf 0x360ae1e5 0x35636acb 0x35635945 0x35590680 0x37c63925 0x3816b 0x1a557 0x3559222b 0x37a869a7 0x3559222b 0x31671943 0x35607a63 0x356076c9 0x3560629f 0x355894dd 0x355893a5 0x32073fed 0x3794d743 0x29d1 0x2990)

2 个答案:

答案 0 :(得分:3)

原因是UITextViewUITextField的行为未记录(如果您找到文档并且我将更新此答案,请更正),默认使用UIMenuController。如果您的UIText * Delegate实现delete:,则会添加“删除”选项。从菜单中选择“删除”后,将使用delete:消息调用您的字段的委托。我通过在断点列表窗格中添加一个异常断点来发现这一点,它为我提供了原始异常所没有的正确符号化堆栈跟踪。导致崩溃的原因是我使用delete:(id)sender以需要使用发件人的方式为条形按钮项提供服务。我通过将delete:重命名为deletePart:来修复它。用户仍然可以通过选择“剪切”来删除文本。

答案 1 :(得分:1)

view发送到UIMenuController意味着您可能已将UIMenuController分配到了不应该去的地方。看看你是否将任何东西设置为等于menuController(或者你的实例变量名是什么),看看是否会导致问题。

此外,这可能是代码中更早发生的过度发布,其中UIMenuController恰好恰好分配在以前被过早释放的内容占用的内存空间中。启用NSZombies并查看错误更改的内容。