Как кэшировать массив изображений, извлеченных из Firebase Storage, используя SDWebImage в Swift 4? - PullRequest
0 голосов
/ 14 сентября 2018

Я извлекаю изображения из хранилища Firebase в виде данных и хочу кэшировать изображения в моем приложении с помощью SDWebImage.Подскажите пожалуйста как этого добиться?

 for x in images_list{

                let storageRef = storage.child("images/\(x).jpg")
                storageRef.getData(maxSize: 1 * 1024 * 1024) { (data, error) in
                    if let error = error{
                        print(error.localizedDescription)
                        return
                    }
                    else{
                        imagesarray.append(UIImage(data: data!)!)
                    }
                    if let x = images_list.last{
                                cell.imageDemo.animationImages = imagesarray
                                cell.imageDemo.sd_setImage(with: storageRef) // Here I Want to cache the images of **imagesarray** that are being animated
                                cell.imageDemo.animationDuration = 2
                                cell.imageDemo.startAnimating()

                    }
                }


            }

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вместо метода getData я использовал метод downloadURL и кэшировал массив изображений.

var imagesarray = [URL]()
for x in images_list{
        let storageRef = storage.child("images/\(x).jpg")
        storageRef.downloadURL { (url, error) in
            if let error = error{
                print(error.localizedDescription)
            }
            else{
                imagesarray.append(url!)
            }
            if let x = images_list.last{
                cell.imageDemo.sd_setAnimationImages(with: imagesarray)
                cell.imageDemo.animationDuration = 2
                cell.imageDemo.startAnimating()
            }
        }
    }
0 голосов
/ 14 сентября 2018

вы загружаете imageData непосредственно из firebase в вашем вопросе.Вместо использования getData вам нужно будет использовать метод downloadURL.Например:

for x in image_list {

        let storageRef = storage.child("images/\(x).jpg")

        //then instead of downloading data download the corresponding URL
        storageRef.downloadURL { url, error in
            if let error = error {

            } else {

                //make your imageArray to hold URL rather then images directly
                imagesArray.append(url)
            }
        }

    }

    //////This is were you would use those url////////
    let url = imageArray.first!
    imageView.sd_setImage(with: url, completed: nil)

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

...