如何向Firebase阵列添加另一个键/值

时间:2019-02-08 19:41:24

标签: swift firebase firebase-realtime-database

我面临的问题是我已经成功创建了数组并显示了如下值:

Users

-uid

   - Name: Example

   - Profile Pic URL: example12345

   - email: example@example.co.uk

但是,在另一个快速文件中,我已经成功生成了一种个性类型,并且正在努力将其添加到数组中,以便最终得到如下所示的内容:

Users
 -uid

   - Name: Example

   - Profile Pic URL: 

   - email: example@example.co.uk

   - personality type: INTJ

我试图将代码从以前的swift类复制到无济于事

这是正常Firebase阵列的代码

 @IBAction func createAccountAction(_ sender: AnyObject) {

    let usersRef = Database.database().reference().child("Users")

    let userDictionary : NSDictionary = ["email" : emailTextField.text!, "Name": nameTextField.text!]

    if emailTextField.text == "" {
        let alertController = UIAlertController(title: "Error", message: "Please enter your email and password", preferredStyle: .alert)
        let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alertController.addAction(defaultAction)
        self.present(alertController, animated: true, completion: nil)
    } else {
        Auth.auth().createUser(withEmail: self.emailTextField.text ?? "", password: self.passwordTextField.text ?? "") { (result, error) in
            if error != nil {


                let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
                let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
                alertController.addAction(defaultAction)
                self.present(alertController, animated: true, completion: nil)
                return
            }
            guard let user = result?.user else { return }

            let vc = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
            self.present(vc, animated: true, completion: nil)
            // HERE YOU SET THE VALUES

            usersRef.child(user.uid).setValue(userDictionary, withCompletionBlock: { (error, ref) in
                if error != nil { print(error); return }


                let imageName = NSUUID().uuidString
                let storageRef = Storage.storage().reference().child("profile_images").child("\(imageName).png")

                if let profileImageUrl = self.profilePicture.image, let  uploadData = UIImageJPEGRepresentation(self.profilePicture.image!, 0.1) {
                    storageRef.putData(uploadData, metadata: nil, completion: { (metadata, error) in

                        if error != nil, metadata != nil {
                            print(error ?? "")
                            return

                        }

                        storageRef.downloadURL(completion: { (url, error) in
                            if error != nil {
                                print(error!.localizedDescription)
                                return
                            }
                            if let profileImageUrl = url?.absoluteString {
                                   self.addImageURLToDatabase(uid: user.uid, values: ["profile photo URL": profileImageUrl as AnyObject])
                            }
                        })
                    })
                }
            }
        )}
    }
}

这是另一个swift文件函数,它生成我想添加到数组中的个性类型

   @IBAction func JPbtn(_ sender: Any) {


   if (Judging < Perceiving){
        Result3 = "P"
    } else {
        Result3 = "J"
    }


    let PersonalityType = "\(Result) \(Result1) \(Result2) \(Result3)"
    print(PersonalityType)

    let vc = self.storyboard?.instantiateViewController(withIdentifier: "Example") as! ViewController
  self.present(vc, animated: true, completion: nil)

}

1 个答案:

答案 0 :(得分:1)

因此,如果您只是尝试添加带有值的新键,那么您要做的就是创建一个像这样的新引用。

guard let currentUserUID = Auth.auth().currentUser?.uid else { return }
print(currentUserUID)
let userPersonalityRef = Database.database().reference().child("users").child(currentUserUID).child("personality")
userPersonalityRef.setValue("Some Value")

设置值时,如果需要,它也可以是字典。但是,如果您的用户不是所有人都具有个性,请确保它在数据模型上是可选的,否则可能会使您的应用崩溃。当您从Firebase获取用户时。