我有tableview,在获得新数据后,我想更新一个特定的部分。所以我更新了相应的模型。我在该部分中的行的初始值为3,现在假设为5.我做了以下操作:
self?.addOperations(items, completion: {(pathes) in
DispatchQueue.main.async {
print("output pathes - \(pathes)")
for (index, item) in (self?.arrValues.enumerated())!{
print("operations count - \(item.operations.count), section - \(index)")
}
self?.tableView.beginUpdates()
self?.tableView.insertRows(at: pathes, with: UITableViewRowAnimation.bottom)
self?.tableView.endUpdates()
}
})
添加操作是加载新数据的函数,将其添加到arrValues(包含单元格数据模型的数组),然后在完成块传递IndexPathObject的数组中。
该代码崩溃了我的应用。在日志中我可以看到:
输出pathes - [[1,1]]
操作计数 - 7,部分 - 0
操作计数 - 5,部分 - 1
在我的第二部分中,我现在有5个值。输出IndexPath表示我在第(1)节中有2行。但错误说:
由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无效更新:第1部分中的无效行数。更新后现有部分中包含的行数(5)必须等于更新前的该部分中包含的行数(3),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入的行数或者超出该部分(0移入,0移出)。'
一切都应该奏效。为什么没有它以及如何解决它?
我的委托方法声明如下:
func numberOfSections(in tableView: UITableView) -> Int {
return arrValues.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrValues[section].operations.count
}