Как добавить еще один ключ / значение в массив Firebase - PullRequest
0 голосов
/ 08 февраля 2019

Проблема, с которой я сталкиваюсь, заключается в том, что я успешно создал массив и отобразил значения следующим образом:

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 безрезультатно

Этокод для рабочего массива 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])
                            }
                        })
                    })
                }
            }
        )}
    }
}

Это другая функция быстрого файла, которая генерирует тип личности, который я хотел бы добавить в массив

   @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 голосов
/ 09 февраля 2019

Поэтому, если вы просто пытаетесь добавить новый ключ со значением, все, что вам нужно сделать, это создать новую ссылку, подобную этой.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...