Я не могу видеть значения из Firebase Swift - PullRequest
0 голосов
/ 02 апреля 2019

Снимок экрана 2019-04-01 в 16.48.08 этикетки,

func fetchData(){
    var ref: DatabaseReference!
    ref = Database.database().reference()
    guard  let currentUid = Auth.auth().currentUser?.uid else {return}
    Database.database().reference().child("users").child(currentUid).observeSingleEvent(of: .value, with: { (snapshot) in
        guard let dictionary = snapshot.value as? Dictionary<String , AnyObject> else {return}
        let uid = snapshot.value
        let user = User(uid:uid as! String, dictionary: dictionary)
        self.user = user
    }) { (error) in
        print(error.localizedDescription)
    }
}

Это мой другой код для установки текстовой метки

func fetchData(){
    var ref: DatabaseReference!

    ref = Database.database().reference()
    guard  let currentUid = Auth.auth().currentUser?.uid else {return}
    Database.database().reference().child("users").child(currentUid).observeSingleEvent(of: .value, with: { (snapshot) in
        guard let dictionary = snapshot.value as? Dictionary<String , AnyObject> else {return}
        let uid = snapshot.value
        let user = User(uid:uid as! String, dictionary: dictionary)
        self.userNameLabel.text = user.username
        self.user = user

        print(snapshot)
    }) { (error) in
        print(error.localizedDescription)
    }
}

дополнительный код, чтобы понять, что я делаю

// информация о пользователе сохранена

  let userID = Auth.auth().currentUser?.uid
        let userData = ["userName": userName,
            "userAge ": userAge] as [String? : Any]
         let values = [userID: userData]

        let ref = Database.database().reference()
        ref.child("users").childByAutoId().setValue(values)



}

Ответы [ 2 ]

1 голос
/ 02 апреля 2019
  1. Я думаю, что вы должны использовать обратные вызовы для асинхронной связи с вашим контроллером.
  2. В вашем примере вы получаете UID, используя "snpashot.value", но вместо этого вы должны взять ключ вашего словаря.
  3. Вот аналогичный пример:

    ///Function that returns as callback the user stored in Firebase with a certain id.
    func getUserFor(id: String, callback: @escaping (Bool, User?) -> Void) {
    
        //Get the user in Firebase "user" collection with the specific id.
        ref.child(Constants.userKey).child(id).observeSingleEvent(of: .value, with: { (userSnapshot) in
    
            guard let userDictionnary = userSnapshot.value as? [String:Any] else { return callback(false, nil) }
    
            let userId = userSnapshot.key
            let userEmail = userDictionnary[Constants.emailKey] as? String
    
            let user = User(id: userId, email: userEmail)
    
            return callback(true, user)
        }) { (error) in
            print(error.localizedDescription)
            return callback(false, nil)
        }
    }
    
0 голосов
/ 04 апреля 2019

Я нашел ответ, что не правильно установил информацию, хранимую пользователем в базе данных.

          let userID = Auth.auth().currentUser?.uid

          let userData = ["userName": userName,

         "userAge ": userAge] as [String? : Any]



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


       ref.child("users/\(userID ?? "")").setValue(userData)



}

// ref.child ("users / (userID ??" ")"). SetValue (userData) // это была ошибка

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