我有一个带有“完成”按钮的自定义工具栏,用于我的 TextView 的输入辅助 View 。当点击这个“完成”按钮时,我想从第一响应者那里退出 TextView ,所以我调用:
[textView resignFirstResponder];
这会抛出一个错误:
Thread 1: Program received signal: "EXC_BAD_ACCESS".
当显示自动更正时点击“完成”按钮(见下图)。即使我打电话,错误仍然存在:
if ([textView isFirstResponder] && [textView canResignFirstResponder]) [textView resignFirstResponder];
好像text view是first responder,可以辞职但是我不能辞职。我该如何解决这个错误?谢谢。
编辑 1:我仍然想启用自动更正。
编辑 2:请看下面的捕获图像。
编辑 3:在方案设置中打开 Zombies
后,记录的消息是:
-[TIZephyrCandidate wordOriginFeedbackID]: message sent to deallocated instance 0x52bbc50
但我不知道这条信息是什么意思,下一步该做什么。
编辑 4:当点击“完成”按钮时,将调用退出第一响应者的方法,该按钮是通过以下代码行添加的目标和操作:
[doneButton addTarget:self action:@selector(resignAllFirstResponders) forControlEvents:UIControlEventTouchUpInside];
resignAllFirstResponders
是:
- (void)resignAllFirstResponders
{
...
if ([textView canResignFirstResponder] && [textView isFirstResponder])
[textView resignFirstResponder];
...
}
最佳答案
如果你使用:
- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString *)aText
UITextViewDelegate
并直接更改方法中的文本,例如:
- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)aRange replacementText:(NSString *)aText
{
aTextView.text = @"hi";
return YES;
}
导致崩溃。
- 出现了拼写检查 View ,
UITextView
的 resignFirstResponder,- 直接更改文本
textView:shouldChangeTextInRange:replacementText
delegate,
应用会崩溃。
关于iOS: "Message sent to deallocated instance"当在 UITextView 上显示其自动更正弹出窗口时退出第一响应者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488932/