Используя Kingfisher, изображения загружаются неправильно в UITableView

Я только начал использовать KingFisher.

Когда вы выполняете слишком быструю прокрутку вниз по UITableView, все сетевые запросы / запросы на загрузку резервируются, поэтому со временем прокрутка прекращается, и все еще завершается предыдущий запрос.

Это приводит к тому, что все изображения мерцают разными изображениями, пока не будут выполнены все запросы на резервное копирование.

Вот мой код для извлечения изображений из кеша или сети.

if ImageCache.defaultCache.cachedImageExistsforURL(finished_URL!) == true {
            print("image is already cached.")

            if cell.tag == indexPath.row{
                cell.card_imageIV.image = UIImage(imageLiteral: "ic_error")
                KingfisherManager.sharedManager.retrieveImageWithURL(finished_URL!, optionsInfo: nil, progressBlock: nil, completionHandler: { (image, error, cacheType, imageURL) -> () in
                    cell.card_imageIV.image = image
                    print("Retrieved cached image")
                })
            }

        }else{
            cell.card_imageIV.kf_setImageWithURL(finished_URL!, placeholderImage: self.placeholderImage, optionsInfo: nil, completionHandler: { image, error, cacheType, imageURL in
                print("\(card_name): Finished")
            })
        }

Я попробовал следующую документацию на https://github.com/onevcat/Kingfisher для отмены всех предыдущих задач загрузки, используя, но не помогло.

Следующий код, который я пробовал:

// The image retrieving will stop.
imageView.kf_cancelDownloadTask()

Это только отменяет текущие ячейки, по крайней мере, я могу понять.

1 ответ

У меня абсолютно такая же проблема с моим проектом. Я ищу способ реализовать то же самое, что и вы: если я прокручиваю ОЧЕНЬ быстро, я хочу отменить предыдущие загрузки. Вот мой подход к этому, используя библиотеку KingFisher (Swift 3):

func tableView(_ tableView: UITableView, didEndDisplaying cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentify) 
    cell?.imageView?.kf.cancelDownloadTask()

}

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

Надеюсь это поможет!

Другие вопросы по тегам