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")
если ошибки нет, используйте свой код для кеширования изображения с помощью пользовательского ключа.