Ios 滚动tableview并在searcher应用程序中单击

Ios 滚动tableview并在searcher应用程序中单击,ios,swift,uitableview,swift3,uisearchbar,Ios,Swift,Uitableview,Swift3,Uisearchbar,我有一个表视图,显示员工列表。现在,当我滚动表视图时,如果滚动尚未停止,如果我单击搜索栏,应用程序就会崩溃。索引超出范围。我不知道为什么会这样。请,如果有人能帮忙的话。事先非常感谢你 注意:Tableview是用listArray加载的。当用户搜索时,我使用searchArray来显示搜索结果 代码: func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) { self.searchedArray = []

我有一个
表视图
,显示员工列表。现在,当我滚动
表视图时,如果滚动尚未停止,如果我单击搜索栏,应用程序就会崩溃。索引超出范围。我不知道为什么会这样。请,如果有人能帮忙的话。事先非常感谢你

注意: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()
}
崩溃:

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()
}
致命错误:索引超出范围


您之所以面临此问题,是因为您在
searchBarTextDidBeginEditing(:)
中过早地将
searchEnable
设置为
true
意味着
searchBarTextDidBeginEditing(
),因此正如您所说的
tableView
仍在滚动,因此,它将调用
cellforrowatinexpath
,因为
searchEnable
true
您将遇到此崩溃。现在要解决您的问题,您需要将
searchEnable
设置为
true
以初始化
searchedArray
数组并重新加载
tableView


因此,您需要在方法
searchBar(\uuuuOldChangeTextIn:replacementText:)
中将
searchEnable
设置为
true
,或者可能在方法
getListForSearchedText

中,您可以显示正在崩溃的代码吗请单击搜索栏修改listArray?否,我不是在修改listArray。@Jenikhan如果你需要帮助,那么你需要向我们展示你的代码。@Jenikhan你需要发布更多的代码。回答这么多,如果这是问题,我会更新。是的,你是对的@Nirav,我刚刚删除了“SearchBartextDiBeginediting(searchBar:UISearchBar)”函数中的代码,现在它工作正常。谢谢。:)