所以我试图将一些数据存储到我的实时数据库中。我目前有两个单独的视图控制器,一个用于用户注册,另一个用于用户选择其个人资料图像并能够更改该图像。在注册页面上,我将“用户名”保存到firebase中,如下所示:
let ref = Database.database().reference().root
let userObject = [
"username":fullname
] as [String:Any]
ref.child("users/profile").child((result!.user.uid)).setValue(userObject)
对于个人资料图片,我保存了这样的数据
func saveProfileImage(profileURL:URL, completion: @escaping ((_ url: URL?) -> ())){
guard let uid = Auth.auth().currentUser?.uid else { return }
let databaseRef = Database.database().reference().child("users/profile/\(uid)")
let userObject = [
"photoURL": profileURL.absoluteString
] as [String:Any]
self.ref.child("users/profile").child(uid).setValue(userObject)
}
我希望两个数据都保存在“用户”->“配置文件”->“ UID”下,并在UID下具有“用户名”和“ photoURL”的观察值。我现在遇到的唯一问题是,当我注册一个帐户时,它将用户名正确地保存在UID节点下,并且一旦为用户保存了配置文件映像,便将其保存在UID节点下,但是替换了“用户名”节点。我想知道,如何将这两个数据保存在用户->个人资料-> UID下,而用户名和photoURL在单独的视图控制器上。
答案 0 :(得分:1)
在某个位置调用setValue()
时,您将用指定的值替换该位置上的所有数据。要改为更新现有数据,请使用updateChildValues
。
类似这样:
self.ref.child("users/profile").child(uid). updateChildValues(userObject)
有关更多信息,请参见updating or deleting data上的Firebase文档。