UITableView падает из-за позднего ответа API - PullRequest
0 голосов
/ 25 апреля 2018

Я новичок в Swift.

У меня есть 4 вкладки сверху и вид таблицы под ним.При нажатии на каждую вкладку выполняется вызов API и заполняется табличное представление данными. Но если я действительно быстро щелкаю по вкладкам, даже до того, как ответ API приходит часто, происходит сбой приложения.

Это показывает различные проблемы.иногда

  • Индекс массива выходит за пределы диапазона
  • [UITableView _contentOffsetForScrollingToRowAtIndexPath: atScrollPosition: usingPresentationValues:]: row (0) за пределами (0) для раздела (0).
  • Завершение работы приложения из-за неперехваченного исключения «NSRangeException», причина: '- [UITableView _contentOffsetForScrollingToRowAtIndexPath: atScrollPosition: usingPresentationValues:]: row (0) за пределами (0) для раздела (0).'

В чем будет проблема?Я вызываю API, удаляю старые данные массива и анализирую новые данные в нем и вызываю метод tableview.reload() в основном потоке.пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 25 апреля 2018

Я считаю, что проблема в неправильной концепции многопоточности.В вашей текущей реализации, если вы быстро переключаете вкладки, вы можете столкнуться с ситуацией, когда вы находитесь на одной вкладке и один из предыдущих запросов API завершается.Таким образом, у вас будет табличное представление, заполненное неверными данными из другой вкладки.Чтобы избежать этого, вы можете выбрать один из следующих вариантов:

  1. При переключении на вкладку отмените все предыдущие запросы.
  2. Каким-то образом сопоставьте результат запроса с соответствующими вкладками и обновитепросмотр таблицы, только если запрос соответствует выбранной в данный момент вкладке.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...