Я хочу сохранить логическое состояние в профиле пользователя в базе данных Firebase - PullRequest
0 голосов
/ 07 сентября 2018

Итак, я успешно сохранил электронную почту пользователя в своей базе данных Firebase, но я хочу также сохранить состояние для этого конкретного пользователя в другом представлении, когда они нажимают сохранить. Это тестовое приложение, которое позволяет мне с головой использовать базу данных Firebase и аутентификацию пользователя.

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

class SignupViewController: UIViewController {

    let ref = Database.database().reference().root

    @IBOutlet weak var firstNameEntryField: UITextField!
    @IBOutlet weak var lastNameEntryField: UITextField!
    @IBOutlet weak var emailEntryField: UITextField!
    @IBOutlet weak var passwordEntryField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func signupPressed(_ sender: UIButton) {

        Auth.auth().createUser(withEmail: emailEntryField.text!, password: passwordEntryField.text!) { (user, error) in
            if error == nil {

                //Show SVProgressHUD
                SVProgressHUD.show()

                //save User to Database
                self.ref.child("users").child((user?.user.uid)!).setValue(self.emailEntryField.text!)

                //Dismiss SVProgressHUD
                SVProgressHUD.dismiss()

                //move to info view controller
                self.performSegue(withIdentifier: "signupToInfo", sender: self)

            } else {

                print("Signup Unsuccessul")
                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)

            }
        }
    }  
}

enter image description here

И с другой стороны, я пытаюсь сохранить логическое состояние в профиле текущего пользователя после регистрации, но я знаю, что, скорее всего, я делаю это неправильно. Как вы можете видеть прямо сейчас, он сохраняет только один экземпляр, поэтому, если я зарегистрирую другого пользователя и сохраню логическое значение «stylist» как true, оно перезапишет текущее ложное состояние. Но я хочу, чтобы каждый зарегистрированный пользователь имел логическое состояние стилиста, связанное с его учетной записью.

enter image description here

class InfoViewController: UIViewController {

    let ref = Database.database().reference()

    var isStylist : Bool = false

    @IBAction func stylistSwitch(_ sender: UISwitch) {
        if isStylist == false {
            isStylist = true
            print(isStylist)
        } else {
            isStylist = false
            print(isStylist)
        }
    }


    override func viewDidLoad() {
        super.viewDidLoad()

    }

    @IBAction func saveUserProfile(_ sender: UIButton) {


        if Auth.auth().currentUser != nil {

            //show SVProgressHUD
            SVProgressHUD.show()

            //save Stylist state to Database
            self.ref.child("stylists").setValue(self.isStylist)

            //dismiss SVProgressHUD
            SVProgressHUD.dismiss()

            //Segue to ProfileViewController
            performSegue(withIdentifier: "infoToProfile", sender: self)

        } else {
            print("Error")
        }

    }
}

Буду признателен за любую помощь, или если у кого-то есть ссылки на хорошие ресурсы. Спасибо.

1 Ответ

0 голосов
/ 07 сентября 2018

Вы сохраняете только значение ключа для uid, но хотите сохранить словарь, подобный этому

let newUserInfo = [
    "email":self.emailEntryField.text!,
    "state":true
]  

self.ref.child("users").child(user!.uid).setValue(newUserInfo, withCompletionBlock: { (error, ref) in

}

после этого вы можете использовать путь users-> uid-> state , чтобы изменить это значение

self.ref.child("users").child("\(user!.uid)/state").setValue(true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...