Получить данные из API внутри cellForRowAt - PullRequest
0 голосов
/ 25 сентября 2019

Я получаю данные из API, есть два разных URL-адреса, с которыми мне приходится работать, один из них дает некоторую информацию, включая имя пользователя, и я могу использовать это имя, чтобы получить полное имя пользователя издругой URL.

внутри cellForRowAt, я получаю имя пользователя вот так

self.timelineData[indexPath.row].owner.login

Затем я вызываю функцию для извлечения данных, чтобы получить полное имя пользователя

     var profile = Login(username: self.timelineData[indexPath.row].owner.login)
                profile.fetchProfileData{ result in
                    switch result {
                    case .success(let data):
                        // Sucesss response from server
                        DispatchQueue.main.async {
                            cell.nameLabel.text = data[0].name
                        }
                    // failed response from server
                    case .failure(let error):
                        print(error)
                    }
                }

Это работает, и я получаю полное имя, но есть две проблемы:

1- Требуется 3-4 секунды, чтобы получить полное имя (это не имеет большого значения)

2-иногда порядок полного имени неверен, и мне приходится прокручивать collectionView для перезагрузки данных, чтобы изменить порядок на правильный.

Может ли кто-нибудь помочь мне лучше это сделать?Ваша помощь будет оценена.

1 Ответ

0 голосов
/ 25 сентября 2019

Это происходит из-за состояния гонки в вашем коде, вам нужно проверить, действительно ли полученные вами данные предназначены для этой ячейки.Отметьте this в условиях гонки и переписайте свой код вне cellForRow и добавьте способ проверить, находится ли та же самая ячейка, в которую он записывал.

Подробнее об условиях гонки

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