Ios swift-cellforrowindexpath“;“索引超出范围”;错误

Ios swift-cellforrowindexpath“;“索引超出范围”;错误,ios,swift,tableview,Ios,Swift,Tableview,我在用于搜索功能的tableview中随机出现“索引超出范围”错误 它在cell.article=self.searchResults?[indexPath.row] 99%的时间它都能工作,但有时即使我使用相同的搜索查询,也会出现此错误并崩溃 func updateSearchResultsForSearchController(searchController: UISearchController) { self.searchResults?.removeAll(k

我在用于搜索功能的tableview中随机出现“索引超出范围”错误

它在
cell.article=self.searchResults?[indexPath.row]

99%的时间它都能工作,但有时即使我使用相同的搜索查询,也会出现此错误并崩溃

func updateSearchResultsForSearchController(searchController: UISearchController)
    {
        self.searchResults?.removeAll(keepCapacity: false)
        if (!searchController.searchBar.text!.isEmpty){
            let query = ["q" : searchController.searchBar.text]
            let start = 1
            let size = 15
            let index = "articles"
            let parameters : [String : AnyObject] = ["index": index, "query": String(query), "start": start, "size": size]
            let url = "http://api.url"
            Alamofire.request(.POST, url, parameters: parameters)
                .responseJSON { response in
                    guard response.result.error == nil else {
                        print(response.result.error!)
                        debugPrint(response)
                        return
                    }
                    if let value: AnyObject = response.result.value {
                        let search = JSON(value)
                        if let data = search["articles"].arrayValue as [JSON]?{
                            self.searchResults = data
                            self.view.hideLoading()
                            self.tableView.reloadData()
                        }
                    }
            }
        }
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCellWithIdentifier("SearchCell") as! SearchTableViewCell        
            let gesture = UILongPressGestureRecognizer(target: self, action: #selector(SearchTableViewController.longPressCell(_:)))
            gesture.minimumPressDuration = 0.5
            cell.addGestureRecognizer(gesture)

            cell.article = self.searchResults?[indexPath.row] ---> "EXC_BREAKPOINT" here. 
            cell.authorButton.tag = indexPath.row

            return cell
        }

问题是在删除所有数据时

self.searchResults?.removeAll(keepCapacity: false)

您不会重新加载
tableView
,直到
self.tableView.reloadData()
在Alamofire中被调用,否则您的
tableView
可能会崩溃。您可以在删除元素后重新加载
tableView
,也可以不删除元素,它们无论如何都会被Alamofire completion上的new覆盖

您也可以发布numberOfRowsInSection方法吗?在异步请求之后,表视图应该重新加载到主线程上。我想问题是您的
搜索结果
数组不包含与
indexath.row
匹配的行。例如,如果
searchResults
仅包含1个元素,并且您的
indexath.row
=2,那么您将看到此崩溃。也许你应该试着调试你的
searchResults
崩溃时包含的内容。你能发布你的其他表视图委托方法吗?我认为这解决了我的问题,我需要进行更多测试来解决这个问题。谢谢你的影子。