SDWebImage Загрузка блока завершения изображения не вызывается

Поэтому SDWebImage Загрузка изображения и сохранение его в кэш-памяти для ключа - это именно то, что я хочу сделать в своем приложении. Я хочу сохранить изображение в ключе и получить изображение позже. Это мой блок кода:

SDWebImageManager.shared().imageDownloader?.downloadImage(with: URL.init(string: url), options: SDWebImageDownloaderOptions.highPriority, progress: { (receivedSize:Int,expectedSize:Int,url : URL?) in
  print("progressing here in this block ")
}, completed: ({(image : UIImage, data : Data,error : Error, finished : Bool)  in
  print("reached in the completion block ")

  if finished {
    SDImageCache.shared().store(image, forKey: "d", toDisk: true, completion: nil)
  } else {
    print(error.localizedDescription)
    showAlert(viewController: self, title: "", message: error.localizedDescription)
  }           
} as? SDWebImageDownloaderCompletedBlock))

Однако блок завершения никогда не вызывается.

1 ответ

Решение

Используйте этот кусок кода:

SDWebImageManager.shared().loadImage(with: NSURL.init(string: individualCellData["cover_image"] as! String ) as URL?, options: .continueInBackground, progress: { (recieved, expected, nil) in
            print(recieved,expected)
        }, completed: { (downloadedImage, data, error, SDImageCacheType, true, imageUrlString) in
            DispatchQueue.main.async {
                if downloadedImage != nil{
                    self.yourImageView.image = downloadedImage
                }
            }
        })

И вам не нужно снова кэшировать изображение, так как SDWebImage уже делает это. Чтобы извлечь изображение из кеша, просто используйте тот же URL в этом коде, и он будет извлекать изображение из кеша, если оно там есть.

Обновленный код:

Если вы хотите использовать свой собственный ключ, тогда используйте imageDownloader вместо loadImage:

SDWebImageManager.shared().imageDownloader?.downloadImage(with: NSURL.init(string: individualCellData["cover_image"] as! String ) as URL?, options: .continueInBackground, progress: { (recieved, expected, nil) in
                print(recieved,expected)
            }, completed: { (image, data, error, true) in
                print("Completed")
            })

После print("Completed") если ошибки нет, используйте свой код для кеширования изображения с помощью пользовательского ключа.

Другие вопросы по тегам