首页 > 解决方案 > UIImageView 有时不加载

问题描述

我有一个从使用此 UIImageView 扩展的 URL 加载用户图片的函数:

let imageCache = NSCache<AnyObject, AnyObject>()

extension UIImageView {

    func loadImageUsingCacheWithUrlString(urlString: String) {

        self.image = nil
        print("here the URL of the image", urlString)
        //check cache for image first
        if let cachedImage = imageCache.object(forKey: urlString as AnyObject) {
            self.image = cachedImage as? UIImage
            return
        }
        // otherwise fire off a new download
        let url = URL(string: urlString)
        URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in
            if error != nil {
                print(error!)
                return
            }
            DispatchQueue.main.async {
                if let downloadedImage = UIImage(data: data!) {

                    imageCache.setObject(downloadedImage, forKey: urlString as AnyObject)

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

现在,我遇到的问题是,有时会加载个人资料图片,有时不会。我想这是因为函数异步下载图像,但为什么一旦下载它就不会出现在配置文件上?我打电话给它:

if hostPerfil != nil {
    if let photo = hostPerfil?.picture {
       hostPic.loadImageUsingCacheWithUrlString(urlString: photo)
    }
    hostName.text = hostPerfil!.firstName
}

我究竟做错了什么?有人可以帮我解决这个问题吗?

标签: swift

解决方案


当您从 imageCache 获取图像时,您需要在主 UI 线程中设置 UIImageView 的图像,以便正确呈现它。你在下载它时这样做了,这就是它显示的原因,但是当你从缓存中获取它时你也必须这样做。

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

推荐阅读