滚动tableview并单击搜索器崩溃应用程序

时间:2017-01-03 13:46:39

标签: ios swift uitableview swift3 uisearchbar

我有一个显示员工列表的tableView。现在,当我滚动tableView并且滚动尚未停止时,如果我单击搜索栏,则应用程序崩溃。指数超出范围。我不知道为什么会这样。如果有人可以提供帮助,请非常感谢你。

注意: Tableview加载了listArray。当用户搜索时,我是searchArray来显示搜索结果。

代码:

func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
        self.searchedArray = []
        searchEnable = true
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

        let cell:ListingCell = self.tableView.dequeueReusableCell(withIdentifier: "Cell") as! ListingCell

        if searchEnable {
                self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: searchedArray)
        }
        else{
                self.setEmployeeDetailsInTableView(cell: cell, index: indexPath.row, dataArray: listArray)
        }
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if (searchBar.text?.characters.count)! > 0 {
        searchEnable = true
        getListForSearchedText(searchText)
    }
    if searchBar.text?.characters.count == 0{
        searchEnable = false
        self.tableView.reloadData()
    }
}

func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
    searchEnable = false
    self.searchedArray = []
    self.tableView.reloadData()
}

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    getListForSearchedText(searchBar.text!)
    searchBar.resignFirstResponder()
}

崩溃:

  

致命错误:索引超出范围

1 个答案:

答案 0 :(得分:1)

您正面临此问题,因为您将searchEnable设置为true过早意味着searchBarTextDidBeginEditing(_:),因此正如您所说tableView仍在滚动,所以它会致电cellForRowAtIndexPath并因searchEnable true而导致此次崩溃。现在要解决您的问题,您需要将searchEnable设置为true,初始化searchedArray数组并重新加载tableView

因此,您需要在方法searchEnable中将true设置为searchBar(_:shouldChangeTextIn:replacementText:),或者可以在方法getListForSearchedText内。