【发布时间】:2019-07-18 14:36:58
【问题描述】:
我正在使用带有TableView.transform = CGAffineTransform (scaleX: 1,y: -1) 和反向tableViewCell 的反向tableView,并使用insertRows 和deleteRows 方法对其进行更新。如果插入和删除在tableView 的可见区域完成,tableView 工作正常。如果更新方法未在可见区域完成,则会崩溃。
func insertEntries(){
if itemsToInsert.count == 0{
return
}
let entry = itemsToInsert.first
itemsToInsert.removeFirst()
dataArray.append(entry!)
let indexPath = IndexPath(row: 0, section: 0)
tableView.beginUpdates()
tableView.insertRows(at: [indexPath], with: UITableView.RowAnimation.bottom)
tableView.endUpdates()
insertEntries()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArray.count
}
错误是:
更新后现有节中包含的行数 (50) 必须等于该节中包含的行数 在更新(47)之前,加上或减去插入的行数或 从该部分删除(插入 1 个,删除 0 个)和加号或减号 移入或移出该部分的行数(0移入,0 搬出去了)。
谢谢
【问题讨论】:
-
代码本身是有效的,应该可以工作。请提供信息:执行“追加和插入”函数的位置。此外,是否还有其他地方正在操纵“dataArray”。
-
该错误非常具体,您可以看到它在更新后检测到错误数量的项目。 (添加了 5 行而不是仅 1 行)。检查您是否在其他地方更改了 dataAray
-
@PaulReznik "append and insert" 的执行方式与代码中的完全相同。我在哪里可以操作 dataArray。如果我在 insertRow 之前更新它,我在哪里操作是否重要。
-
您发布的代码无法生成该错误。您发布的代码仅添加一行。但是错误显示了 5 行的差异,并声称您只插入了 1 行,同时也删除了 1 行。因此,您需要显示更新数据模型、插入、删除和重新加载行的所有相关代码。
-
代码递归调用自身。例如,要插入 5 个条目,它会递归地将一个条目一个接一个地附加到 dataArray 中。 '5 rows' 就是因为这个
标签: ios swift uitableview