Swift - 搜索控制器不断崩溃

时间:2017-02-24 21:19:46

标签: ios swift searchbar

我刚刚开始学习快速;我想添加一个搜索栏,允许用户搜索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)
    }


}

2 个答案:

答案 0 :(得分:0)

在表视图中插入行之前,必须将相同索引处的项插入到数据源数组中。

但是在这种情况下我建议将查询结果分配给数据源数组并调用reloadData()

答案 1 :(得分:0)

正如@vadian所说,您必须修改数据源以匹配您在UI中尝试反映的内容。因此,如果我们在Set中插入一行,那么您必须首先将对象插入到您要添加的行的相同索引的数据源中。像这样:

UITableView