滚动tableview并点击搜索器崩溃应用程序
我有一个tableView
这是显示雇员名单。现在当我滚动tableView
,如果还没有停止滚动,并且如果我点击搜索栏,应用程序崩溃。索引超出范围。我不知道为什么会发生这种情况。请,如果有人可以帮忙。提前谢谢你。滚动tableview并点击搜索器崩溃应用程序
注意: Tableview加载listArray。当用户搜索时,我搜索数组来显示搜索结果。
代码:
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()
}
崩溃:
fatal error: Index out of range
您都面临这个问题,因为你设置searchEnable
到true
太早意味着在searchBarTextDidBeginEditing(_:)
,这样就像你说的tableView
仍然在滚动,所以它会调用cellForRowAtIndexPath
,并且因为searchEnable
是true
你正在发生这次事故。现在要解决您的问题,您需要将searchEnable
设置为true
,您需要初始化searchedArray
阵列并重新加载tableView
。
因此,您需要在方法searchBar(_:shouldChangeTextIn:replacementText:)
中将searchEnable
设置为true
,或者可能在您的方法getListForSearchedText
之内。
Thnx如此多的答案,我会更新,如果这是问题。 –
是的,你对@ Nirav,我刚刚删除了“searchBarTextDidBeginEditing(_ searchBar:UISearchBar)”func中的代码,现在它的工作正常。谢谢。 :) –
@JeniKhant欢迎队友:),很高兴它的作品:) –
您能告诉我们代码崩溃请 –
您是否在点击搜索栏上修改listArray? – user3608500
不,我没有修改listArray。 –