【发布时间】:2018-08-25 22:48:25
【问题描述】:
我正在编写一个代码,我必须在选择一个部分时插入和删除所有行。
下面是插入和删除的代码
var paths = [IndexPath]()
for row in 0..<(arrayOfSection?.count)! {
let indexPath = IndexPath(row: row, section: selectedIndex!)
paths.append(indexPath)
}
// Toggle collapse
if previousSelectedIndex != nil && previousSelectedIndex == section {
self.arrayOfCategories?.removeAll()
self.catergoryTableView.beginUpdates()
self.catergoryTableView.deleteRows(at: paths, with: .fade)
self.catergoryTableView.endUpdates()
}
else{
self.catergoryTableView.beginUpdates()
self.catergoryTableView.insertRows(at: paths, with: .fade)
self.catergoryTableView.endUpdates()
header.setCollapsed(false)
//scroll
let sectionRect = self.catergoryTableView.rect(forSection: selectedIndex!)
self.catergoryTableView.scrollRectToVisible(sectionRect, animated: true)
}
previousSelectedIndex = selectedIndex
插入行工作正常,但是当我尝试从所选部分删除行时出现错误
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试从第 0 部分删除第 9 行,更新前仅包含 0 行”
我做错了什么?
【问题讨论】:
-
不相关但 - 一如既往 -
beginUpdates/endUpdates对单个惰性/移动/删除操作完全没有影响。调用insertRows/deleteRows之前必须在数据源中插入/删除对应的项 -
如果删除数据源,则无法一次插入、删除一行。一次重新加载表或删除相应索引处的数据源。
-
您应该尝试删除以下代码
self.arrayOfCategories?.removeAll()。 -
您是否尝试在点击的部分展开和折叠行?
-
如果这是你想要的,你可以删除整个部分developer.apple.com/documentation/uikit/uitableview/…