Определенные буквы вызывают индекс вне диапазона CollectionView / TableView UISearchController - PullRequest
0 голосов
/ 05 октября 2018

У меня есть вид коллекции внутри таблицы и я пытаюсь найти данные XML.Мой searchcontroller находится на моем главном контроллере представления табличного представления, и результаты показаны на отдельном контроллере представления результатов поиска.Некоторые письма будут искать без проблем.Однако при поиске определенных букв я получаю следующий индекс из-за ошибки диапазона:

index out of range

Я отлаживал и обнаруживал, что отфильтрованные данные иногда отличаютсяиз возвращенных / показывающих данных:

different array counts

Я пытался добавить разные условия для обработки разных подсчетов, но я получаю сбой для индекса в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()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...