Я случайно получаю ошибку «index out of range» в моем представлении таблицы, которую я использую для функции поиска.swift - cellforrowindexpath "index out the range" error
Он врезается в 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
}
можете ли вы опубликовать свой метод numberOfRowsInSection? – Miknash
После асинхронного запроса предполагается, что вид таблицы должен быть перезагружен в основном потоке – vadian
Я предполагаю, что проблема заключается в том, что массив 'searchResults' не содержит строку, которая соответствует' indexPath.row'. Например, если 'searchResults' содержит только 1 элемент и ваш' indexPath.row' = 2, вы увидите этот сбой. Возможно, вам следует попытаться отладить то, что содержит ваши 'searchResults', когда он сбой. – pbodsk