Как вернуть значение fireshot для дочернего снимка? - PullRequest
0 голосов
/ 05 декабря 2018
var test = String()

func fetchUser() {
 let currentUserUid = Auth.auth().currentUser?.uid

    Database.database().reference().child("users").child(currentUserUid!).child("test").observeSingleEvent(of: .value) { (snapshot) in

        self.test = snapshot.value as! String
   })   
}     

Я хочу добавить значение снимка к моей переменной.

Но это сбой, хотя моя концепция Firebase совершенна и соответствует коду.

В чем может быть причина?

Структура консоли:

  • пользователи
    • iBagi96IMGbd2k6wUtXjPs0gmNq1.<--- currentUserUid <ul>
    • test: testValue

Ошибка, которую я получаю: Невозможно привести значение типа 'NSNull' (От 0x10dd86de0) до 'NSString' (0x10b2485d8).

Кроме того, я хотел бы добавить, что однажды я переименовал дочернее имя из "test" в sth else, а потом оно работало в течение короткого времени.Чем ошибка произошла снова.

1 Ответ

0 голосов
/ 05 декабря 2018

Есть несколько опечаток в коде в вопросе, но это вроде как правильно.

Самая большая проблема - обработка опций - они принудительно разворачиваются, когда вы должны рассматривать их как опционы дляЗащитите ваш код.

, чтобы этот

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

был бы лучше, чем

guard let user = Auth.auth().currentUser else {return}
let uid = user.uid

Но, работая с вашим кодом, вот обновление, которое считывает значение с этого узлав виде строки и распечатывает его.

var test = String()

func readUserString() {
    let currentUserUid = "iBagi96IMGbd2k6wUtXjPs0gmNq1"
    let usersRef = self.ref.child("users")
    usersRef.child(currentUserUid).child("test").observeSingleEvent(of: .value, with: { snapshot in
        let test = snapshot.value as! String
        print(test) //prints "testValue"
    })
}
...