Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更新firebase中的数据而不覆盖以前的数据_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 更新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 }

我正试图将数据保存到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)
}

我觉得问题似乎出在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
    ,用于修复原始文档中的一个打字错误

是否将数据另存为新条目?如果是,那么为什么要使用UpdateChildValue?@Neeraj是的,我想将新数据保存为新条目!我一直在查这个,但我不知道如何制作changes@Neeraj您知道更好的方法吗?请作为用户引用尝试:-让usersReference=ref.child(“UserSwipes”).child(uid.childByAutoId().key-else{return}我遇到了更多错误类型为“String?”的值在usersReference行中没有成员“updateChildValues”。updateChildValues(值,withCompletionBlock:{(err,ref)in if err!=nil{print(“将数据保存到firebase中的错误”)return})