【发布时间】:2019-03-25 09:43:37
【问题描述】:
我正在尝试在 tableview 中插入一个新部分
let oldIns = insertCounter //insertCounter = 40
insertCounter += Int(INSERT_MESSAGES) // insertCounter = 80
let minn = min(insertCounter, Int(dbmessages.count))
print(minn) // minn = 80
tableView.beginUpdates()
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet, with: .top)
tableView.endUpdates()
override func numberOfSections(in tableView: UITableView) -> Int {
let a = min(insertCounter, Int(dbmessages.count))
print(a) // after call insertSections a = 80
return min(insertCounter, Int(dbmessages.count))
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
我收到一个错误:
无效更新:节数无效。段数 更新后的表视图中包含的 (80) 必须等于 更新前表格视图中包含的部分数(40), 加上或减去插入或删除的节数(插入 80 个, 0 个已删除)。
当我执行以下操作时:
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(oldIns, minn)) as IndexSet, with: .top)
我得到错误:
异常'NSInternalInconsistencyException',原因:'试图 插入第 80 节,但更新后只有 80 节'
我做错了什么?
【问题讨论】:
-
不相关但
NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet是可怕的objective-c-ish。这是斯威夫特:IndexSet(integersIn: 0..<minn)。首先,您必须更新数据源数组,然后插入行/节。在这种情况下,beginUpdates/endUpdates毫无意义。 -
@vadian 是的,非常感谢,你可以添加为答案
标签: swift