问题很简单。
我正在尝试为在新部分中添加新行设置动画。
更新代码:
func updateTableView(sessions: [Sessions]) {
self.foundSessions = sessions
if self.numberOfSections(in: self.tableView) == 0 {
self.tableView.beginUpdates()
self.tableView.insertSections([0], with: .automatic)
self.tableView.endUpdates()
}
for i in 0..<self.foundSessions.count {
self.tableView.beginUpdates()
self.tableView.insertRows(at: [IndexPath(row: i, section: 0)], with: .automatic
self.tableView.endUpdates()
}
}
UITableViewDataSource
代码:
override func numberOfSections(in tableView: UITableView) -> Int {
if foundSessions.isEmpty { return 0 }
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return foundSessions.count
}
错误:
由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'试图插入第0部分,但更新后只有0个部分
显然,似乎没有插入该部分。如果我取出insertRows
,则最终会显示空白部分,如顶部的tableFooterView
所示。我遵循了here,here,here和here的建议,并以这种方式阅读了各自的Apple Documentation,显然没有有用。
那里的任何iOS专家都能以我的方式向我显示错误吗?
编辑:更多调试信息-updateTableView
在异步函数的回调中被调用。我将所有这些代码都包装在一个DispatchQueue.main.async
块中,以试图纠正这种情况,但是没有成功。
答案 0 :(得分:0)
尝试将所有更新都放在此部分中,并将其排成一个块,如下所示开始...结束
self.tableView.beginUpdates()
self.tableView.insertSections([0], with: .automatic)
for i in 0..<self.foundSessions.count {
self.tableView.insertRows(at: [IndexPath(row: i, section: 0)], with: .automatic
}
self.tableView.endUpdates()