如何解决Swift-TableView断言错误:cellForRowAtIndexPath,原因是:canEditRowAt
使用以下代码:
override func tableView(_ tableView: UITableView,canEditRowAt indexPath: IndexPath) -> Bool {
switch viewControllerCanEdit {
case .viewControllerThatCanNotEdit:
return false
default:
tableView.cellForRow(at: indexPath)?.reuseIdentifier == "CellThatAllowsEditing" else { return false }
return true
}
}
我收到以下断言错误:
[Assert]试图在表视图上调用-cellForRowAtIndexPath: 它正在更新其可见单元的过程中 不允许。在以下位置建立符号断点 UITableViewAlertForCellForRowAtIndexPathAccessDuringUpdate来捕获 在调试器中查看此内容,并查看导致此情况发生的原因。也许你 正在尝试从表视图中向表视图询问单元格 关于特定行的回调?表格视图:
; 层= ; contentOffset:{0,-100}; contentSize:{414,2765.3333333333335}; AdjustedContentInset:{100,0, 83,0}; dataSource: >
我缩小了范围。可能是此错误是由于tableView在更新数据的过程中调用canEditRowAt()
导致的。因此,与tableView.cellForRow(at:)
匹配的调用尚不存在。
我的问题是;如果tableView正在更新,是否有一种方法可以突破该功能?或者,如果有一种更好的尝试匹配的方法,是否可以根据单元格的类型来编辑该单元格?
解决方法
更好的方法是在数据模型中添加属性
var canEdit = false
对其进行维护并检查(dataSourceArray
是数据源阵列)
override func tableView(_ tableView: UITableView,canEditRowAt indexPath: IndexPath) -> Bool {
switch viewControllerCanEdit {
case .viewControllerThatCanNotEdit:
return false
default:
return dataSourceArray[indexPath.row].canEdit
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。