iOS: "Message sent to deallocated instance"当在 UITextView 上显示其自动更正弹出窗口时退出第一响应者

标签 ios uitextview dealloc resignfirstresponder autocorrect

我有一个带有“完成”按钮的自定义工具栏,用于我的 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:请看下面的捕获图像。

auto correction is shown

编辑 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;
}

导致崩溃。

  1. 出现了拼写检查 View ,
  2. UITextView 的 resignFirstResponder,
  3. 直接更改文本 textView:shouldChangeTextInRange:replacementText delegate,

应用会崩溃。

关于iOS: "Message sent to deallocated instance"当在 UITextView 上显示其自动更正弹出窗口时退出第一响应者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8488932/

相关文章:

objective-c - 设置属于 IBOutletCollection 的 UILabel 文本的正确方法是什么

ios - 如何在不滚动 textView 的情况下使 UITableViewCell 的高度扩展以适应 UITextView 的内容并包装文本? ( swift 5)

objective-c - 基于 ARC 的应用程序中的过早释放

iOS - 弹出到上一个 viewController 后未调用 viewController dealloc 方法

objective-c - 释放的对象什么时候最终被销毁?

android - 我们可以免费使用 Realm 数据库来替代 Sqlite 和 CoreData 吗?

ios - 当用户注销时,如何将 iOS 应用重置为初始状态

ios - 尽管 NSAttributedString 不同意,为什么第二个文本 block 的行高比第一个高得多?

ios - 用户开始编辑后如何将占位符附加到 TextView /文本字段

ios - Swift3 中的 UIView 动画