在Firebase实时数据库中存储数据

时间:2019-11-26 02:04:02

标签: ios firebase firebase-realtime-database

所以我试图将一些数据存储到我的实时数据库中。我目前有两个单独的视图控制器,一个用于用户注册,另一个用于用户选择其个人资料图像并能够更改该图像。在注册页面上,我将“用户名”保存到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在单独的视图控制器上。

1 个答案:

答案 0 :(得分:1)

在某个位置调用setValue()时,您将用指定的值替换该位置上的所有数据。要改为更新现有数据,请使用updateChildValues

类似这样:

self.ref.child("users/profile").child(uid). updateChildValues(userObject)

有关更多信息,请参见updating or deleting data上的Firebase文档。