обновление данных в базе данных без перезаписи предыдущих данных - PullRequest
0 голосов
/ 24 сентября 2019

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

 fileprivate func saveSwipeToDataBase(didLike: Any) {
    let swipeDate = Int(NSDate().timeIntervalSince1970)
    guard let uid = Auth.auth().currentUser?.uid else { return }

    guard let cardUID = topCardView?.cardViewModel.uid else { return }

    let documentData = ["userSwipeId": uid,
                        "didLike": didLike,
                        "checked": 0,
                        "Swipe Date": swipeDate,
                        "type": SWIPE_INT_VALUE] as [String : Any]

    self.postJobDataIntoDatabseWithUID(uid: cardUID, values: documentData as [String : AnyObject])

}
private func postJobDataIntoDatabseWithUID(uid: String, values: [String: AnyObject]) {
    let ref = Database.database().reference(fromURL: "https://oddjobs-b131f.firebaseio.com/")
    ref.observe(.childAdded, with: { (snapshot) in

    let usersReference = ref.child("UserSwipes").child(uid)
    usersReference.updateChildValues(values, withCompletionBlock: { (err, ref) in
        if err != nil {
            print("error saving data into firebase")
            return
        }

    })
 }, withCancel: nil)
}

Мне кажется, что проблема связана с updateChildValues, но я, вероятно, далеко.спасибо за любую помощь.

1 Ответ

0 голосов
/ 24 сентября 2019

Если вы хотите добавить новый дочерний узел в местоположение с автоматически сгенерированным (и гарантированно уникальным) идентификатором, вам нужно позвонить childByAutoId() в это местоположение.

Таким образом, чтобы добавитьновый узел chid в /UserSwipes/$uid, когда postJobDataIntoDatabaseWithUID вызывается

private func postJobDataIntoDatabaseWithUID(uid: String, values: [String: AnyObject]) {
    let ref = Database.database().reference(fromURL: "https://oddjobs-b131f.firebaseio.com/")
    let usersReference = ref.child("UserSwipes").child(uid)
    usersReference.childByAutoId().setValue(values, withCompletionBlock: { (err, ref) in
        if err != nil {
            print("error saving data into firebase")
            return
        }
    })
 }, withCancel: nil)

Изменения по сравнению с вашей версией:

  • Это больше не добавляет наблюдателя, который не нужен, так как вашновые данные не зависят от существующих данных.
  • Теперь вызывается childByAutoId() для создания нового дочернего узла.
  • Затем вызывается setValue() для установки значения нового дочернего узла.узел.
  • Функция называется postJobDataIntoDatabaseWithUID, исправляя опечатку, которая была у вас в оригинале.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...