Как остановить просмотр таблицы до того, как API завершит вызов? (Кнопка - регистр) - PullRequest
0 голосов
/ 09 мая 2019

У меня есть таблица и функция вызова API и API.Я просто использую свою функцию apicall () для viewDidLoad () и Table.reloadData () после получения данных.Это отлично работает в первый раз, когда я получаю этот экран.

У меня есть код внутри таблицы.

zerointdeparturehour = String(departurehour[indexPath.row])

Который получает время из массива, который заполняется внутри вызывающей функции API.

Все отлично работает как надо.Представление загружается, вызывается API, перезагружается данные и табличное представление и заполняется.

и, если API вызывается снова, все значения массива, созданные из вызова API, удаляются с помощью escapehour.removeAll ().(Я использовал это, чтобы я мог вызывать API снова и снова на одном и том же экране для разных дат)

НО,

, если я нажимаю кнопку (кнопка по умолчанию), чтобы вернуться на предыдущую страницуи если я пытаюсь вернуться на эту страницу снова, viewDidLoad () вызывает функцию apicall (),

, но я получаю ошибку в

zerointdeparturehour = String(departurehour[indexPath.row]) - Index out of bounds.

Почему это происходит ТОЛЬКО, когда я двигаюсьвернуться со страницы просмотра таблицы обратно на предыдущую страницу и снова вернуться на страницу просмотра таблицы?(Я знаю, что это происходит из-за того, что в данный момент массив вылетов равен нулю, потому что API не заполнил информацию внутри него)

Почему не происходит в первый раз.

Я получаю свою строку отApi, который работает в первый раз.

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return flightcount // comes from api


    }
I do have a function to check if the flightcount is 0 or not and what to do when count is 0 .

Приложение зависало, потому что flightcount сохранил значение из предыдущего экрана, и таблица пыталась загрузить это значение, что привело к сбою.

Я исправил его, просто переинициализировав его как 0.

    override func viewDidAppear(_ animated: Bool) {
        flightcount = 0
    }

На предыдущем экране.Спасибо, что указал мне правильное направление.(оба, кто прокомментировал)

1 Ответ

1 голос
/ 09 мая 2019

Есть два возможных решения:

  1. Синхронизируйте departurehour и flightcount dataArray, вам не следует перезагружать tableview, пока у вас не будет готов arrays.
  2. Или добавьте проверку перед доступом к departurehour, независимо от того, пусто оно или нет:

if !departurehour.isEmpty { zerointdeparturehour = String(departurehour[indexPath.row]) }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...