Ситуация:
- Есть ViewController на котором расположено два элемента - UIPickerView и UITableView
- При выборе нового значения в UIPickerView у нас сразу происходит запрос на сервер, откуда мы получаем данные
- После получения данных делаем обновление таблицы с помощью tableView.reloadData()
В чем проблема: Если быстро переключать значения в PickerView, то рано или поздно приложение падает с ошибкой Index out of Range, и ошибка эта появляется в методе cellForRowAtIndexPath
Мне удалось обойти эту ошибку только путем если я делаю UIPickerView недоступным для взаимодействия (isUserIntercationEnabled = false) до того времени, пока мы не получили ответ от сервера.
Я подозреваю что проблема заключается в следующем:
- Если мы быстро переключаемся между элементами PickerView, то каждое переключение подразумевает запрос данных с сервера (в каком то случае требуется больше времени на их загрузку, в каком то случае требуется меньше времени на их загрузку).
Соответственно если я переключаюсь на новое значение, в нем начинается загрузка данных и я не дожидаюсь этой загрузки и перевожу PickerView на следующее значение (начинается новая загрузка данных), далее происходит какой то факап в модели на основании которой строится таблица и я получаю собственно ошибку.
Первое что я попробовал сделать, это вызов метода cancel у свойства task своего нетворкменеджера, при переключении на новое значение PickerView, но не помогло
Что посоветуете делать в данной ситуации ?