UIImageView иногда не загружается - PullRequest
0 голосов
/ 05 июля 2018

У меня есть функция, которая загружает рис пользователя с URL, который использует это расширение UIImageView:

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
}

Что я делаю не так? Кто-нибудь может мне помочь с этим, пожалуйста?

1 Ответ

0 голосов
/ 06 июля 2018

Когда вы получаете изображение из вашего imageCache, вам нужно установить изображение UIImageView в основном потоке пользовательского интерфейса, чтобы оно отображалось правильно. Вы сделали это при загрузке, поэтому он отображается, но вы должны делать это и при получении из кеша.

DispatchQueue.main.async {
    if let cachedImage = imageCache.object(forKey: urlString as AnyObject) {
        self.image = cachedImage as? UIImage
        return
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...