EXC_BAD_ACCESS 重新加载带有文本字段的单元格

Posted

技术标签:

【中文标题】EXC_BAD_ACCESS 重新加载带有文本字段的单元格【英文标题】:EXC_BAD_ACCESS reloading cell with textfield inside 【发布时间】:2014-11-11 15:16:05 【问题描述】:

我的应用出现问题,找不到解决方案。

我有一个带有自定义单元格的 UICollectionView。我的单元格内部有一个 UITextField。

当文本字段处于编辑模式(键盘处于活动状态)时,如果我重新加载 collectionView,我会遇到 EXC_BAD_ACCESS 错误。发生此错误是因为调用了 UITextField 的方法 resignFirstResponder。 问题是collectionView中可能不再存在该单元格,因为它已被释放。

这是我的错误堆栈:

知道如何避免这个问题吗?

提前致谢

【问题讨论】:

您的自定义单元解构器是否正确处理所有观察者? 你能更好地解释你的问题@cdstamper,我只在“textFieldShouldReturn”中添加resignFirstResponder 你能告诉我踪迹吗?听起来你的 dealloc 没有做它应该做的事情。也许您的 UITextField 委托在某个时候不复存在 - 在这种情况下,您应该在对象消失时将其设置为 nil。 我刚刚更新了我的问题。我应该在哪里将对象设置为零?在自定义单元格的死锁中?文本字段的委托在自定义单元格范围之外,在模型中为单元格提供数据 通常您会在您的 dealloc 方法中执行此操作(通常称为解构函数)。由于 textField 归您的自定义单元格所有,但委托在您的单元格范围之外...尝试在您的单元格的 dealloc 中设置 delegate=nil。 【参考方案1】:

在模型中添加对文本字段的引用,弱引用。

当模型将被释放时,退出文本字段的响应者。

代码:

-(void)dealloc
    if (self.refrenceTextField) 
        [self.refrenceTextField resignFirstResponder];
        self.refrenceTextField = nil;
    

【讨论】:

以上是关于EXC_BAD_ACCESS 重新加载带有文本字段的单元格的主要内容,如果未能解决你的问题,请参考以下文章

没有操作的表单,并且 enter 不会重新加载页面

单击自定义单元格的 UITextField 后重新加载 TableView

单击文本字段后 UIView 重新加载?

在单元格文本字段的 textFieldShouldEndEditing 方法中调用 UICollectionView 重新加载数据不起作用

防止表格重新提交

带有 EXC_BAD_ACCESS 的 Core Data deleteObject 应用程序崩溃