ios - 更新 firebase 中的数据而不覆盖以前的数据

标签 ios swift firebase firebase-realtime-database

我正在尝试将数据保存到 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 上,但我可能还很遥远。感谢您的任何和所有帮助。

最佳答案

如果您想将新的子节点添加到具有自动生成(并保证唯一)ID 的位置,您需要在该位置调用 childByAutoId()

因此,当调用 postJobDataIntoDatabaseWithUID 时,在 /UserSwipes/$uid 下添加一个新的 chid 节点

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,修复了原始版本中的拼写错误。

关于ios - 更新 firebase 中的数据而不覆盖以前的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58072597/

相关文章:

ios - 呈现 SKStoreProductViewController 重新激活非事件约束

swift - 在 Xcode 8.0 Swift 3.0 上检测手势

ios - 如何在水平 UIPageViewController 中实现垂直 UIPageViewController

android - 获取太多数据时如何摆脱卡住屏幕

node.js - 仅允许对 Cloud Functions for Firebase 进行写访问

ios - iOS如何停止在后台播放音频?

iphone - Objective C 中的迷你服务器实现

ios - Json 解析失败

ios - 为什么标题重复了?

javascript - Firebase Cloud Messaging 的 getToken() 在 Chrome 扩展程序中待处理