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 重新加载带有文本字段的单元格的主要内容,如果未能解决你的问题,请参考以下文章
单击自定义单元格的 UITextField 后重新加载 TableView
在单元格文本字段的 textFieldShouldEndEditing 方法中调用 UICollectionView 重新加载数据不起作用