我的UITextViews在文本选择和删除时使应用程序崩溃。
剪切,复制和粘贴似乎工作正常。日志中唯一的错误是:
*** 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)
答案 0 :(得分:3)
原因是UITextView
和UITextField
的行为未记录(如果您找到文档并且我将更新此答案,请更正),默认使用UIMenuController。如果您的UIText * Delegate实现delete:
,则会添加“删除”选项。从菜单中选择“删除”后,将使用delete:
消息调用您的字段的委托。我通过在断点列表窗格中添加一个异常断点来发现这一点,它为我提供了原始异常所没有的正确符号化堆栈跟踪。导致崩溃的原因是我使用delete:(id)sender
以需要使用发件人的方式为条形按钮项提供服务。我通过将delete:
重命名为deletePart:
来修复它。用户仍然可以通过选择“剪切”来删除文本。
答案 1 :(得分:1)
将view
发送到UIMenuController
意味着您可能已将UIMenuController
分配到了不应该去的地方。看看你是否将任何东西设置为等于menuController
(或者你的实例变量名是什么),看看是否会导致问题。
此外,这可能是代码中更早发生的过度发布,其中UIMenuController
恰好恰好分配在以前被过早释放的内容占用的内存空间中。启用NSZombies
并查看错误更改的内容。