Отменить запрос на изображение Alamofire - PullRequest
0 голосов
/ 11 февраля 2019

Основная информация: У меня есть tableView и каждая ячейка tableView , содержащая изображение и несколько меток .Я использую метод tableView prefetch data , чтобы выполнять вызовы API для извлечения данных при прокрутке tableView.

Проблема: Иногда я вижу конкретную ячейку с изображениемкакой-то другой клетки .Это происходит, когда я прокручиваю немного быстрее обычной скорости.Примечание: чтобы преодолеть эту проблему, мне просто нужно прокрутить tableView вверх / вниз

Попытки: Я установил для imageView значение nil в подготовиться к повторному использованию method.

Вывод, к которому я пришел: Отладив проблему, я понял, что, как только ячейка становится видимой, я делаю запрос изображения, используя Alamofire Image, но прокручиваю его, пока мы не получили ответ,Итак, что может происходить, так это то, что при получении ответа он устанавливает изображение для ячейки, но эта ячейка не видна, так как я повторно использую ячейки.Ячейка содержит некоторые другие данные.

Пожалуйста, дайте мне знать, как я могу отменить запрос, если ячейка не видна.Дайте мне знать, если я что-то упустил в вопросе.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

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

использовать заполнитель в методе af_setImage.это решит вашу проблему

imageView.af_setImage(withURL: URL(string: img)!, placeholderImage: UIImage(named: "product_placeholder")
0 голосов
/ 11 февраля 2019

В этой ситуации я делаю, чтобы тег ячейки соответствовал номеру строки.

Когда изображение завершает запрос, я проверяю, есть ли у него тот же тег (если он использовался повторно, тег будетизменено).

Примерно так: cellForRowAt indexPath:

cell.tag = indexPath.row
ImageService.shared.getImage(completion: { (image) in
  if let image = image, cell.tag == indexPath.row {
    //apply image
  }
}

Это не отменяет запрос, но игнорирует результат, если ячейка больше не находится в той же позиции.

...