引用Firebase文档时发现nil:没有使用可选选项吗?

时间:2019-04-18 20:53:07

标签: swift xcode firebase google-cloud-firestore

我正在使用Firebase。引用文档并尝试修改/添加数据时,它每次都会崩溃。它给了我一个线程1:致命错误:意外地发现nil,同时隐式展开了Optional值。

我尝试清理项目并重建它。我已经打印了用户电子邮件(每次都会给我一个有效的电子邮件地址)。 Chosenbackground也被定义。我不知道为什么它一直崩溃,因为我没有使用nil可选。

这就是我导入的内容:

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

在这里我定义db: var db : Firestore!

在这里选择了设置背景并且调用了该函数:

@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 个答案:

答案 0 :(得分:2)

如果您仔细查看the code,则会在db中设置viewDidLoad

override func viewDidLoad() {
    super.viewDidLoad()

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

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

问题是dbnil-因此,该变量被隐式强制展开,并且由于没有值而导致崩溃(又名nil)。 / p>