Найдено ноль при ссылке на документ firebase: не используются опции?

#swift #xcode #firebase #google-cloud-firestore

# #swift #xcode #firebase #google-cloud-firestore

Вопрос:

Я работаю с Firebase. Когда вы ссылаетесь на документ и пытаетесь изменить / добавить данные, он каждый раз выходит из строя. Это дает мне поток 1: Фатальная ошибка: неожиданно найдено nil при неявном развертывании необязательного значения.

Я пробовал очищать проект и перестраивать его. Я распечатал адрес электронной почты пользователя (который каждый раз дает мне действительный адрес электронной почты). Также определен Chosenbackground . Я не знаю, почему он продолжает сбоить, потому что я не использую необязательный параметр, который равен нулю.

Это то, что я импортирую :

 import Foundation
import Firebase
import FirebaseAuth
import FirebaseFirestore
import FirebaseDatabase
import GoogleSignIn
 

Здесь я определяю db :
var db : Firestore!

Здесь устанавливается chosenBackground и вызывается функция :

 @objc func lightBlueAndOrangeImageTapped(tapGestureRecognizer: UITapGestureRecognizer){
        print("lightBlueAndOrangeTapped")
        // Your action
        selectedBackgroundLabel.text = "Light Blue and Orange Background is selected"
        chosenBackground = "lightBlueAndOrange"
        chosenBackgroundToFirebase()
    }
 

Это функция :

 func chosenBackgroundToFirebase(){ //IN THIS FUNCTION IT CRASHES
        if let userEmail = Auth.auth().currentUser?.email {
            print("(userEmail)")
            print("(chosenBackground)")
            let newDocRef = db.collection("customizeDatabase").document("(userEmail)") //ERROR ON THIS LINE

            newDocRef.updateData([
                "background": "(chosenBackground)"
            ]) { err in
                if let err = err {
                    print("Error updating document: (err)")
                    newDocRef.setData([
                        "background" : "(self.chosenBackground)"
                    ])
                } else {
                    print("Document successfully updated")
                }
            }
        }
    }
 

Я хочу иметь возможность читать и писать документ. Большое вам спасибо за помощь 🙂 Я все еще довольно новый разработчик, поэтому вся помощь была очень признательна 🙂 (хотя это довольно глупая ошибка).

Комментарии:

1. На какой линии это происходит?

2. Я добавил, в какой строке он находится 🙂 Это в функции chosenBackgroundToFirebase()

3. Попробуйте print(db) перед строкой, на которой происходит сбой. Если это так nil , то проблема заключается в установке db переменной.

4. Вы правы. db равен нулю. Как я мог бы это исправить (и сделать его ненулевым)?

5. @RosalieW как вы инициализируете db , прежде чем получить доступ, вы должны установить значение

Ответ №1:

Если вы внимательно посмотрите на код, db он будет установлен viewDidLoad .

 override func viewDidLoad() {
    super.viewDidLoad()

    // [START setup]
    let settings = FirestoreSettings()

    Firestore.firestore().settings = settings
    // [END setup]
    db = Firestore.firestore()
}
 

Проблема заключалась в том, что db было nil — и из-за этого переменная была принудительно развернута неявно и вызвала сбой, так как не было никакого значения (иначе nil ).