我正在尝试将数据保存到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上,但我可能已经走了。感谢您提供的所有帮助。
答案 0 :(得分:0)
如果要将新的子节点添加到具有自动生成的ID(并保证是唯一的)ID的位置,则需要在该位置调用childByAutoId()
。
因此,在调用/UserSwipes/$uid
时在postJobDataIntoDatabaseWithUID
下添加一个新的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
,用于修复原始文档中的错字。