Как игнорировать или перезаписать кэш UIImage в swift, когда я загрузил новый образ на сервер? - PullRequest
3 голосов
/ 10 октября 2019

Я хочу, чтобы изображение URL обновлялось сразу после загрузки нового изображения, но оно всегда отображает предыдущее загруженное изображение.

func changeUserIMG(imgURL:String){

    if let url = URL(string: imgURL) {

        URLSession.shared.dataTask(with: url, completionHandler: {(data,responds,error) in
            if error != nil{
                print(error!.localizedDescription)
            }
            else if let imageData = data{
                DispatchQueue.main.async {
                    self.userImage.image = UIImage(data: imageData)
                }
            }
        }).resume()

    }
}

Есть ли способ перезаписать или игнорировать UIImage chache?

edit:

func changeUserIMG(imgURL:String){

    if let url = URL(string: imgURL) {

        let request = URLRequest.init(url: url, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: 60)
        URLSession.shared.dataTask(with: request,completionHandler: {(data,responds,error) in
            if error != nil{
                print(error!.localizedDescription)
            }else{
                DispatchQueue.main.async {
                    self.userImage.image = UIImage(data: data!)
                }
            }
        }).resume()

}

Даже я пытаюсь использовать .reloadIgnoringLocalCacheData, по-прежнему отображать предыдущее загруженное изображение.

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

С учетом вашей проблемы, тот же URL-адрес отличается от изображения, поэтому вы всегда должны использовать старую картинку. Эффект, который вы хотите получить, заключается в том, что когда сервер загружает новое изображение, клиент может немедленно отобразить новое изображение.

Вы можете попробовать эти точки.

  1. Если вы хотитечтобы немедленно отобразить последнее изображение, вы должны уведомить клиента об обновлении страницы после завершения загрузки.

  2. Я думаю, что вы можете попробовать картинку, соответствующую URL, чтобы избежатьустранение ненужных проблем с кэшированием.

0 голосов
/ 10 октября 2019

Я нашел несколько способов очистки кеша URLSession:

1) Замена URLSession.shared на URLSession(configuration: URLSessionConfiguration.ephemeral)

2) Добавление этого метода перед перезагрузкой данных: URLCache.shared.removeAllCachedResponses()

...