Swift图像缓存无法重新加载

时间:2017-11-10 09:42:09

标签: ios swift

我在使用此UIImageView扩展正确缓存来自JSON的图像时遇到问题。首次打开应用程序并向下滚动页面时,图像正确加载。但是,当我向上滚动时,它们不会重新加载并完全消失。任何人都可以看到代码有什么问题吗?

   let imageCache = NSCache<AnyObject, AnyObject>()

   extension UIImageView   {

    func loadImageUsingUrlString(urlString: String) {
        let url = NSURL(string: urlString)

        if let imageFromCache = imageCache.object(forKey: urlString as AnyObject) as? UIImage   {
            self.image = imageFromCache
            return
        }

        URLSession.shared.dataTask(with: url! as URL) { (data, response, error) in

            if error != nil {
                print(error ?? "URLSession error")
                return
            }

            DispatchQueue.main.async {

                let imageToCache = UIImage(data: data!)

                imageCache.setObject(imageToCache!, forKey: urlString as AnyObject)

                self.image = imageToCache
            }
        }.resume()
    }
}

以下是cell.swift文件的片段

let imageCache = NSCache<AnyObject, AnyObject>()

func setupThumbnailImage() {
    if let thumbnailImageUrl = television?.poster_url   {

        let urlPrefix = "https://www.what-song.com"
        let urlSuffix = thumbnailImageUrl

        let urlCombined = urlPrefix + urlSuffix

        thumbnailImageView.loadImageUsingUrlString(urlString: urlCombined)

    }
}

2 个答案:

答案 0 :(得分:0)

我建议使用 kingFisher ,它非常易于使用,并且可以从缓存线程等开始管理所有内容。

           let imageResource = ImageResource(downloadURL:URL(string: imagePath )!,cacheKey: imagePath )
           viewImage.kf.indicatorType = .activity
           viewImage.kf.setImage(with: resource)

其中imagePath是您图片的网址,viewImage是您的imageView

答案 1 :(得分:0)

很可能你会以错误的方式调用它。 请记住,在tableView中重用单元格。 到URLSessionTask的响应时,您已经向上/向下滚动。在这种情况下,self.image将被分配给当前可见的单元格。 请添加您的cellForRow代码。