我有一个显示员工列表的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()
}
崩溃:
致命错误:索引超出范围
答案 0 :(得分:1)
您正面临此问题,因为您将searchEnable
设置为true
过早意味着searchBarTextDidBeginEditing(_:)
,因此正如您所说tableView
仍在滚动,所以它会致电cellForRowAtIndexPath
并因searchEnable
true
而导致此次崩溃。现在要解决您的问题,您需要将searchEnable
设置为true
,初始化searchedArray
数组并重新加载tableView
。
因此,您需要在方法searchEnable
中将true
设置为searchBar(_:shouldChangeTextIn:replacementText:)
,或者可以在方法getListForSearchedText
内。