我刚刚开始学习快速;我想添加一个搜索栏,允许用户搜索Firebase数据库中的数据。搜索栏已添加,但过滤搜索结果的代码会因此错误而崩溃:
由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:'无效更新:第0节中的无效行数。更新后现有部分中包含的行数(0)必须等于更新前的该部分中包含的行数(0),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入的行数或者超出该部分(0移入,0移出)。
错误指向此行
self.tableView.insertRows(at: [IndexPath(row: self.businessArray.count-1, section: 0)], with: UITableViewRowAnimation.automatic)
override func viewDidLoad() {
super.viewDidLoad()
ref = FIRDatabase.database().reference(fromURL:"")
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
tableView.tableHeaderView = searchController.searchBar
ref.child("Businesses").queryOrdered(byChild: "Basic-Info/business").observe(.childAdded, with: { (snapshot) in
//insert the rows
self.tableView.insertRows(at: [IndexPath(row: self.businessArray.count-1, section: 0)], with: UITableViewRowAnimation.automatic)
}) { (error) in
print(error.localizedDescription)
}
}
答案 0 :(得分:0)
在表视图中插入行之前,必须将相同索引处的项插入到数据源数组中。
但是在这种情况下我建议将查询结果分配给数据源数组并调用reloadData()
答案 1 :(得分:0)
正如@vadian所说,您必须修改数据源以匹配您在UI中尝试反映的内容。因此,如果我们在Set
中插入一行,那么您必须首先将对象插入到您要添加的行的相同索引的数据源中。像这样:
UITableView