У меня есть вид коллекции внутри таблицы и я пытаюсь найти данные XML.Мой searchcontroller находится на моем главном контроллере представления табличного представления, и результаты показаны на отдельном контроллере представления результатов поиска.Некоторые письма будут искать без проблем.Однако при поиске определенных букв я получаю следующий индекс из-за ошибки диапазона:
Я отлаживал и обнаруживал, что отфильтрованные данные иногда отличаютсяиз возвращенных / показывающих данных:
Я пытался добавить разные условия для обработки разных подсчетов, но я получаю сбой для индекса вcellForItemAt или сбой в didSelectItemAt. * 1015 *
Мой код:
Контроллер основного представления:
var filteredData = [AgeRangeData]()
func updateSearchResults(for searchController: UISearchController) {
filteredData.removeAll()
for missingFilteredData in allAgesArray {
filteredData.append(missingFilteredData)
}
if let searchText = searchController.searchBar.text {
filteredData = allAgesArray.compactMap {
var filterObjects = $0
filterObjects.ageRangeData = $0.ageRangeData.filter {
$0.title.range(of: searchText, options: .caseInsensitive) != nil
}
return filterObjects.ageRangeData.isEmpty ? nil : filterObjects
}
let searchResultsVC = searchController.searchResultsController as! SearchResultsVC
searchResultsVC.missingFilteredData = filteredData
DispatchQueue.main.async {
searchResultsVC.resultsTableView.reloadData()
}
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchText.isEmpty {
self.searchBarActive = false
} else {
self.searchBarActive = true
updateSearchResults(for: searchController)
}
DispatchQueue.main.async {
self.missingTableView?.reloadData()
}
}
Контроллер представления результатов поиска:
var missingKidData: [AgeRangeData] = []
var missingFilteredData: [AgeRangeData]? = []
var missingKidSearchData: AgeRangeData!
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return missingFilteredData?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "searchResultsCell", for: indexPath) as! SearchResultsTableViewCell
if (missingFilteredData?.count)! > indexPath.row {
let missingSearchKidData = missingFilteredData![indexPath.row].ageRangeData
cell.missingKidData = missingSearchKidData[indexPath.row]
cell.missingResultsImage.layer.cornerRadius = 5.0
cell.missingResultsImage.clipsToBounds = true
return cell
}
return UITableViewCell()
}