Я создаю приложение с табличным представлением и контроллером поиска, используя API Rick and Morty, https://rickandmortyapi.com/api/character/. API разбит на страницы, и я могу проанализировать данные с первой страницы и отобразить их на моемTableView.Я также могу получить другие страницы API, когда прокручиваю таблицу.Я не могу понять, как разобрать все данные со страниц одновременно.Когда я использую контроллер поиска, я не могу искать все символы, пока не прокручиваю tableView, чтобы получить все символы.Я хочу иметь возможность искать любой символ без предварительной прокрутки tableView.Как бы я сразу проанализировал все данные с разных страниц и отобразил их в виде таблицы?Любая помощь приветствуется, спасибо!
Это мой текущий код для анализа данных и получения других страниц при прокрутке tableView
func getIntitalRickAndMortyData(){
downloadedDataArray = []
//here first page is next page
nextPageUrl = "https://rickandmortyapi.com/api/character/"
getRickAndMortyData()
filteredCharacterArray = downloadedDataArray
}
func getRickAndMortyData() {
//construct the url, use guard to avoid nonoptional
guard let urlObj = URL(string: nextPageUrl) else
{ return }
//fetch data
URLSession.shared.dataTask(with: urlObj) {[weak self](data, response, error) in
//to avoid non optional in JSONDecoder
guard let data = data else { return }
do {
//decode object
let downloadedRickAndMorty = try JSONDecoder().decode(PagedCharacters.self, from: data)
self?.downloadedDataArray.append(contentsOf: downloadedRickAndMorty.results)
self?.nextPageUrl = downloadedRickAndMorty.info.next
self?.filteredCharacterArray = (self?.downloadedDataArray)!
self?.currentPage += 1
DispatchQueue.main.async {
self?.tableView.reloadData()
}
//print(self?.aryDownloadedData as Any)
} catch {
print(error)
}
}.resume()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let count = self.downloadedDataArray.count
if count > 1 {
let lastElement = count - 1
if indexPath.row == lastElement {
//call get api for next page
getRickAndMortyData()
}
}
guard let cell = tableView.dequeueReusableCell(withIdentifier: "rickandmortyCell") as? CharacterTableViewCell else { return UITableViewCell() }
let results: Results
if isFiltering() {
results = filteredCharacterArray[indexPath.row]
} else {
results = downloadedDataArray[indexPath.row]
}
cell.selectionStyle = .none
cell.nameLabel.text = results.name
cell.statusLabel.text = results.status
cell.genderLabel.text = results.gender
cell.originLabel.text = results.origin.name
cell.lastlocationLabel.text = results.location.name
let id = String(results.id)
cell.idLabel.text = id
return cell
}
}
IЯ пытался сделать это, используя цикл while, сохраняя текущий счетчик страниц и увеличивая его, но ничего не отображается, и я получаю это в консоли: «Соединение XPC прервано»
func getAllRickAndMortyData() {
while currentPage <= 25 {
getRickAndMortyData()
}
}