使用Swift更新Firebase中的子值

我试图在用户点击按钮后实施更新Firebase数据库。 当用户登录时(在我的情况下使用Facebook),使用创建的数据树中的初始值成功创建数据结构。

我想要实现的是,一旦用户进入应用程序并且他们创建了一个新项目,它将其保存到数据库中,从而更新已创建的子值之一下的值。 请参阅我的代码和屏幕截图以供参考 – 感谢您的帮助!

// user taps button to send item to be updated in Firebase data tree func confirmAddPlace() { // add place to tableview array let accessToken = FBSDKAccessToken.current() guard let accessTokenString = accessToken?.tokenString else { return } let credentials = FIRFacebookAuthProvider.credential(withAccessToken: accessTokenString) FIRAuth.auth()?.signIn(with: credentials, completion: { (user, error) in if error != nil { print("Something went wrong with our FB user: ", error ?? "") return } guard let uid = user?.uid else { return } // here is where i am having issues let ref = FIRDatabase.database().reference().root.child("Users").child(uid).child("Places") let values = ["place": self.placeNameLabel.text] ref.updateChildValues(values) }) animateOut() } 

在此处输入图像描述

 func viewController(_ viewController: GMSAutocompleteViewController, didAutocompleteWith place: GMSPlace) { let placeID = place.placeID placesClient.lookUpPlaceID(placeID, callback: { (place, error) -> Void in if let error = error { print("lookup place id query error: \(error.localizedDescription)") return } guard let place = place else { return } }) let selectedPlace = place.formattedAddress if let name = selectedPlace as String! { self.placeNameLabel.text = "Are you sure you would like to add \(name) to your places?" } } 

您想要更改Places的值,这是child(uid)子项中的值。

 let values = ["place": self.placeNameLabel.text] let ref = FIRDatabase.database().reference().root.child("users").child(uid).updateChildValues(["Places": values]) 

user3708224 – 你可以试试这个:

 let values = ["place": self.placeNameLabel.text] // create a child reference that uses a date as the key let date = Date() let ref = FIRDatabase.database().reference().root.child("users").child(uid).child(date).updateChildValues(["Places": values]) 

如果您想要更多地控制日期对象中的组件,请尝试以下操作:

 let calendar = Calendar.current let year = calendar.component(.year, from: date) // you can do the same with [.month, .day, .hour, .minute, and more] // This will allow you to have control of how frequently they can update the DB // And it will allow you to sort by date 

如果您想将其作为字符串上传到Firebase,请尝试以下操作:

 /** This function returns the Date as a String - "Year-Month-Day" If the character ' / ' is used in place of ' - ' Firebase will make each component child of the previous component. */ func getDate() -> String { let date = Date() let calendar = Calendar.current // hours + min: -\(calendar.component(.hour, from: date))-\(calendar.component(.minute, from: date)) return "\(calendar.component(.year, from: date))-\(calendar.component(.month, from: date))-\(calendar.component(.day, from: date))" } let values = ["place": self.placeNameLabel.text] let ref = FIRDatabase.database().reference().root.child("users").child(uid).child(getDate()).updateChildValues(["Places": values])