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以捕获并查看是什么导致了这种情况的发生。也许你正在尝试从表视图中向表视图请求单元格关于特定行的回调?表视图:<UITableView:0x7fd48303ec00;帧=(0;414 896(;clipseToBounds=是;autoresize=W+H;gestureRecognizers=<NSArray:0x60000284e070>;layer=<CAL层:0x60000264f340>;contentOffset:{0,-100};contentSize:{4142765.3333333333335};adjustedContentInset:{100,83,0};数据源:<TableViewController:0x7fd48281b000>gt;

我已经缩小了原因范围。据推测,此错误是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
}
}

相关内容

最新更新