动画化将新行插入UITableView中的新部分

时间:2018-06-21 16:26:34

标签: ios swift uitableview uikit

问题很简单。

我正在尝试为在新部分中添加新行设置动画。

更新代码:

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所示。我遵循了herehereherehere的建议,并以这种方式阅读了各自的Apple Documentation,显然没有有用。

那里的任何iOS专家都能以我的方式向我显示错误吗?

编辑:更多调试信息-updateTableView在异步函数的回调中被调用。我将所有这些代码都包装在一个DispatchQueue.main.async块中,以试图纠正这种情况,但是没有成功。

1 个答案:

答案 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()