我有一个View Model类,该类具有一个属性(数组),该属性用作UITableView的数据源。
我正在VM中执行一些后台任务。它将元素添加到数据源中,并要求我的View Controller使用insertRows
方法更新表视图。 VC在主队列上排队此更新。
在更新完成之前,另一个后台任务将在数据源中添加一个元素,并且VM要求VC在tableview中插入一行。
当VC尝试插入第一次调用的单元格时,它发现我尝试插入的黑白数据源元素和indexPaths不匹配。 (内部一致性异常),我的应用程序崩溃了。
如何解决此问题?预先感谢。
--------------编辑:添加代码----------
我的VM有一个委托,VM可以使用该委托来通知VC。
var dataFields: [FieldVM] = []
weak var delegate: Delegate?
// At some point in code:
while(some_condition) {
DispatchQueue.global().async { [weak self] in
self?.dataFields.append(field)
//Some logic to find indexPaths
self?.delegate.insertFields(at: indexPaths)
}
}
注意:我不能简单地保留变量以存储所有indexPath,然后再调用委托方法,因为可以从多个位置调用此方法。所以我需要一个通用的解决方案。
我的VC已实现了该协议,并实现了以下方法:
func insertFields(at indexPaths: [IndexPath]) {
DispatchQueue.main.async { [weak self] in
self?.tableView.beginUpdates()
self?.tableView.insertRows(at: indexPaths,with: .bottom)
self?.tableView.endUpdates()
}
}