簡體   English   中英

Swift 圖像緩存不起作用

[英]Swift image cache not working

我正在嘗試從 URL 緩存圖像,以使我的表格滾動更順暢。 這似乎並沒有緩存它們,我無法弄清楚我做錯了什么。 誰能告訴我這有什么問題?

let imageCache = NSCache()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {

        self.image = nil

        //check cache for image first
        if let cachedImage = imageCache.objectForKey(urlString) as? UIImage {
            self.image = cachedImage
            return
        }

        //otherwise fire off a new download
        let url = NSURL(string: urlString)
        NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: { (data, response, error) in

            //download hit an error so lets return out
            if error != nil {
                print(error)
                return
            }

            dispatch_async(dispatch_get_main_queue(), {

                if let downloadedImage = UIImage(data: data!) {
                    imageCache.setObject(downloadedImage, forKey: urlString)

                    self.image = downloadedImage
                }
            })

        }).resume()
    }
}

我覺得在啟動新下載之前應該有一個 else {,但即使我嘗試過,我也不認為它工作正常。 我什至嘗試以這種方式運行它,滾動表格以確保它有機會緩存​​所有圖像,然后刪除整個下載部分,以便它只加載緩存的圖像,而沒有圖像顯示,所以我沒有認為它實際上是在緩存它們。

好吧,對不起,如果這是一個不好的問題。 這是最終奏效的:

var imageCache = NSMutableDictionary()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {

        self.image = nil

        if let img = imageCache.valueForKey(urlString) as? UIImage{
            self.image = img
        }
        else{
            let session = NSURLSession.sharedSession()
            let task = session.dataTaskWithURL(NSURL(string: urlString)!, completionHandler: { (data, response, error) -> Void in

                if(error == nil){

                    if let img = UIImage(data: data!) {
                        imageCache.setValue(img, forKey: urlString)    // Image saved for cache
                        dispatch_async(dispatch_get_main_queue(), { () -> Void in
                        self.image = img
                    })
                    }


                }
            })
            task.resume()
        }
    }
}

我想我有什么東西出問題了。

暫無
暫無

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

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