簡體   English   中英

Swift圖像緩存未重新加載

[英]Swift Image Cache not Reloading

使用此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)

    }
}

我建議使用kingFisher ,它非常易於使用,並且從緩存線程等開始管理所有內容。

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

其中imagePath是圖像的網址,而viewImage是您的imageView

很可能您會以錯誤的方式稱呼它。 請記住,在tableView中,您可以重用單元格。 等到URLSessionTask的響應返回時,您已經已經向上/向下滾動了。 在這種情況下, self.image分配給當前可見的單元格。 請添加您有問題的cellForRow代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM