Swift Firebase Query запускается при каждом изменении в базе данных - PullRequest
0 голосов
/ 27 апреля 2018

Я создал приложение, которое загружает данные из Firebase. Чтобы сохранить ресурсы и сделать приложение максимально экономичным, я реализовал запросы для загрузки подходящих данных для клиента. Вот код:

    ref.queryOrdered(byChild: "name").queryEqual(toValue: "test").observe(.value, with:{ (snapshot: DataSnapshot) in

        if snapshot.exists(){
            ref.queryOrdered(byChild: "hometown").queryEqual(toValue: "munich").observe(.value, with:{ (snapshot: DataSnapshot) in


                for users in snapshot.children.allObjects as! [DataSnapshot]{
                    if users.key as! String != userId{
                        let item = users.value as? [String: AnyObject]
                        let userid = users.key as! String
                        let Username  = item?["name"] as! String
                        let Userage = item?["age"] as! String
                        let ProfileImage = item?["profileImageUrl"] as! String
                        let firstImage = item?["firstimage"] as! String
                        let seccondImage = item?["seccondimage"] as! String
                        let thirdImage = item?["thirimage"] as! String
                        let fourthImage = item?["fourthimage"] as! String
                        let fifthImage = item?["fifthimage"] as! String
                        let sixtImage = item?["sixtimage"] as! String
                        let sex = item?["sex"] as! String
                        let gender = item?["gender"] as! String
                        let info = item?["info"] as! String
                        let userItem = UserObject(userId: userid, name: Username, age: Userage, sex: sex, gender: gender, profileImage: ProfileImage, fistImage: firstImage, seccondImage: seccondImage, thirdImage: thirdImage, fourthImage: fourthImage, fifthImage: fifthImage, info: info, sixtImage: sixtImage)
                          self.checkValidFences(userItem: userItem, gf: gf)

                    }
                }


            })
        }

    })

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

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Вы можете решить эту проблему путем Однократного чтения данных

Для упрощения этого сценария вы можете использовать метод наблюдающий единый случайOfType: обратный вызов события добавляется один раз, а затем не запускается снова.


observeSingleEvent(of:with:)

Это эквивалентно Наблюдать за EventType: withBlock:, за исключением того, что блок немедленно отменяется после возвращения начальных данных.

подробнее здесь:

https://firebase.google.com/docs/reference/swift/firebasedatabase/api/reference/Classes/DatabaseReference#observesingleeventofwith

0 голосов
/ 27 апреля 2018

Вам может понадобиться observeSingleEvent вместо observe

поэтому заменяйте каждый

.observe(.value

с

.observeSingleEvent(.value

См. Здесь в Документы

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