Попытка загрузить изображения из firebase отдельно от остальных данных в виде таблицы - PullRequest
0 голосов
/ 22 января 2019

У меня есть таблица с набором ячеек, заполненных из Firebase Real-time (для текста) и Firebase Storage (для изображений).Код, который я собрал, ждет загрузки всего текста и изображений перед тем, как представить таблицу.

В идеале я хотел бы, чтобы текст сначала загружался в ячейки, а затем соответствующие изображения.

Код установки выглядит следующим образом:

  1. Главный контроллер вида
  2. Файл Tableviewcell, в котором хранятся метка и изображение.
  3. Файл модели.

Основная функция, которая вызывает у меня проблему, заключается в следующем:

    func LoadDataFromImageTest() {


    databaseReference = Database.database().reference()

    let refPVV = Database.database().reference(withPath: "PVV").queryOrdered(byChild: "Status").queryEqual(toValue: "Active")

    refPVV.observeSingleEvent(of: .value, with: { [weak self] (snapshot) in

        //if the reference have some values
        if snapshot.childrenCount > 0 {

            //clearing the list
            self?.FBImageList.removeAll()

            //iterating through all the values
            for PVV in snapshot.children.allObjects as! [DataSnapshot] {
                //getting values
                let PVVObject = PVV.value as? [String: AnyObject]
                let PVVImageName  = PVVObject?["ImageName"] as! String?
                let PVVName = PVVObject?["Name"] as! String?

                let imageURL = Storage.storage().reference().child(PVVImageName!)

                imageURL.downloadURL(completion: { (url, error) in

                    if error != nil {
                        print(error?.localizedDescription as Any)
                        return
                    }

                    URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in

                        if error != nil {
                            print(error as Any)
                            return
                        }

                        guard let imageData = UIImage(data: data!) else { return }

                        DispatchQueue.main.async {



                            let PVV = FBImageModel(ImageName: imageData as UIImage?, Name: PVVName as String?)
                            self!.FBImageList.insert(PVV, at: 0)

                        }

                        DispatchQueue.main.async {
                            //reloading the tableview
                            self?.FBImageTableView.reloadData()
                        }

                    }).resume()
                })
            }
        }
    }
)}

Как это следует изменить, чтобы загружать изображения по отдельности после заполнения текстовой метки для всехячейки?

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 22 января 2019

Вы можете сделать это с помощью FirebaseUI. установить FirebaseUI Pod

pod 'FirebaseUI/Storage'

Тогда используйте код ниже

 // Reference to an image file in Firebase Storage
    let reference = storageRef.child("images/stars.jpg")


    // Placeholder image
    let placeholderImage = UIImage(named: "placeholder.jpg")

    // Load the image in your imageView using SDWebImage
    imageView.sd_setImage(with: reference, placeholderImage: placeholderImage)

В вашем случае не загружайте imageData. просто измените модель изображения, чтобы сохранить ссылку на хранилище, и при создании строк используйте метод sd_setImage, чтобы заполнить изображение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...