UIImageView кеширует данные из API - PullRequest
1 голос
/ 31 января 2020

Когда я быстро прокручиваю свой UITableView, imageView показывает неправильные изображения из API. (то есть изображение Samsung, показанное в статье Brexit и т. д.).

Вот расширение, позволяющее мне загружать изображения (возможно, я могу что-то изменить здесь):

extension UIImageView {
    func donwloadImage(from url: String) {
        let urlRequest = URLRequest(url: URL(string: url)!)
        let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in

            if error != nil {
                print(error)
                return
            }

            DispatchQueue.main.async {
                self.image = UIImage(data: data!)

            }
        }
        task.resume() 
    }

}

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Ниже приведен пример, показывающий правильную обработку. Пожалуйста, попробуйте.


class CustomViewCell: UITableViewCell {

@IBOutlet weak var imageView: UIImageView!

private var task: URLSessionDataTask?

override func prepareForReuse() {
    super.prepareForReuse()
    task?.cancel()
    imageView.image = nil
}

func configureWith(url string: String) {
    guard let url = URL(string: string) else { return }

    task = URLSession.shared.dataTask(with: url) { (data, response, error) in
        if let data = data, let image = UIImage(data: data) {
            DispatchQueue.main.async {
                self.imageView.image = image
            }
        }
    }
    task?.resume()
 }
}
0 голосов
/ 31 января 2020

обязательно используйте для этого библиотеку.

advice

https://github.com/kean/Nuke

nuke очень прост.

Nuke.loadImage(with: url, into: imageView)
0 голосов
/ 31 января 2020

Попробуйте любую из следующих библиотек:

https://github.com/SDWebImage/SDWebImage

https://github.com/onevcat/Kingfisher

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