Ios 更新firebase中的数据而不覆盖以前的数据
我正试图将数据保存到firebase中,但每次执行代码保存数据时,firebase中都会覆盖以前的数据。在这里,我试着遵循一些技巧,但没有成功Ios 更新firebase中的数据而不覆盖以前的数据,ios,swift,firebase,firebase-realtime-database,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 }
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)
}
我觉得问题似乎出在UpdateChildValue上,但我可能离它太远了。谢谢你的帮助 如果要向具有自动生成(并保证唯一)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