Переход с Firebase на Firestore вызвал фатальную ошибку: неожиданно обнаружен ноль... в запросе

Я пытаюсь получить данные пользователя из хранилища после их переноса из базы данных. Приведенный ниже код прекрасно работал с firebase и извлекал данные пользователя. Firebase запрос

Тем не менее, после изменения запроса на запрос Firestore, я получил эту ошибку. Запрос FireStore

Напечатайте заявление здесь "document.data()" содержит данные, но я получил эту ошибку. Я не знаю, откуда эта ошибка.

Когда я сравниваю document.data () с nil, я получаю "Данные документа: содержит nil". Данные документа: содержит ноль

Я не знаю, как я предполагал получить данные.

вот код, где я получаю ошибку,

    static func getUser(uid: String, setUserDefaults: @escaping (NormalUser) -> Void){
   DataService.ds.REF_USERS_NORMAL.document(uid).getDocument { (document, error) in
        if error != nil{
            print("\(String(describing: error?.localizedDescription))")
        }else{
                if document != nil{
                    let data = document?.data() as! [String: String]
                   print("Document data: \(String(describing: document?.data() as! [String: String]))")
                    let user = NormalUser(userData: (data as Dictionary<String, AnyObject>))
                    setUserDefaults(user)
                }else{
                    print("Document data: contains nil")
                }
        }
    }
}

Вот как я определил переменные,

 import Foundation
 import Firebase

class NormalUser: User {

private var _email: String?
private var _city: String?
private var _country: String?
private var _name: String?
private var _phone: String?
private var _profileImgUrl: String?


var email: String {
    return _email!
}
var city: String {
    return _city!
}
var country: String {
    return _country!
}
var name: String {
    return _name!
}
var phone: String {
    return _phone!
}
var profileImgUrl: String {
    set{
        self.profileImgUrl = _profileImgUrl!
    }
    get{
        if let pI = _profileImgUrl{
            return pI
        }
        return ""
    }
}

init(userData: Dictionary<String, AnyObject>) {

    super.init(userId: userData["uid"] as! String, user: userData)

    if let email = userData["email"] as? String {
        self._email = email
    }
    if let city = userData["city"] as? String {
        self._city = city
    }
    if let country = userData["country"] as? String {
        self._country = country
    }
    if let name = userData["name"] as? String {
        self._name = name
    }
    if let phone = userData["phone"] as? String {
        self._phone = phone
    }
    if let profileImgUrl = userData["imgUrl"] as? String {
        self._profileImgUrl = profileImgUrl
    }
}

static func createNormalUser(uid: String, userData: Dictionary<String, String>) {
    // add user to database
    //DataService.ds.REF_USERS_NORMAL.child(uid).setValue(userData)
    DataService.ds.REF_USERS_NORMAL.document(uid).setData(userData) { (err) in
            if let err = err {
                print("Error writing document: \(err)")
            } else {
                print("Document successfully written!")
            }
    }

    addUserToGroup(uid:uid, group:"normal")
}

static func updateUserProfile(uid: String, userData: Dictionary<String, String>) {
    //DataService.ds.REF_USERS_NORMAL.child(uid).updateChildValues(userData)
   DataService.ds.REF_USERS_NORMAL.document(uid).updateData(userData)
}

static func getUser(uid: String, setUserDefaults: @escaping (NormalUser) -> Void){

   DataService.ds.REF_USERS_NORMAL.document(uid).getDocument { (document, error) in
        if error != nil{
            print("\(String(describing: error?.localizedDescription))")
        }else{
                if document != nil{
                    let data = document?.data() as! [String: String]
                   print("Document data: \(String(describing: document?.data() as! [String: String]))")
                    let user = NormalUser(userData: (data as Dictionary<String, AnyObject>))
                    setUserDefaults(user)
                }else{
                    print("Document data: contains nil")
                }
        }
    }
}

}

1 ответ

Решение

Я решил проблему!

Для любого, кто может столкнуться с этой ошибкой, проблема была с userId. Я получал идентификатор пользователя из firebase, который, в моем случае, больше не обслуживает мой запрос, и в итоге получил ноль. Когда я получил идентификатор непосредственно из аутентификации,

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

Это решило проблему!

Другие вопросы по тегам