如何向Firebase数组添加另一个键/值



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

Users
-uid
- Name: Example
- Profile Pic URL: example12345
- email: example@example.co.uk

然而,在另一个swift文件中,我成功地生成了一个个性类型,并正在努力将其添加到数组中,这样我就得到了这样的结果:

Users
-uid
- Name: Example
- Profile Pic URL: 
- email: example@example.co.uk
- personality type: INTJ

我已经尝试从以前的swift类复制代码,但无效

这是正在工作的火球阵列的代码

@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)
}

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

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获得你的用户时。

最新更新