在Firebase中更新集合会返回错误“解开可选值时发现nil”?

时间:2019-04-05 18:02:34

标签: swift database xcode firebase google-cloud-firestore

我正在制作此应用程序,其目的是创建个人资料,添加狗,然后更新它们的计时器(它们最后一次吃饭,散步的时间等)。我在使用Firebase时遇到了一些问题。我设法让用户将狗添加到他们的帐户中,但是现在,我试图更新某只狗的某些值,导致应用崩溃并显示“意外发现nil,同时展开了一个可选值”,这似乎是由于Firebase造成的。我的数据库包含用户,它们的狗和狗值的集合,例如firstTimer。当我尝试使用setData()方法更新此值时,它一直崩溃,并且数据库中没有任何显示。我也尝试过单独更新值,但无济于事。请告诉我是否要使用错误的方法,是否还有其他尝试的方法,谢谢!

import Foundation
import Firebase
import UIKit

//DogViewController
class MyDogViewController: UIViewController {

    var db: Firestore!
    var auth: Auth!
    var storage: Storage!
    var thisDog: DogEntry?
    var dogRef: DocumentReference!     

    override func viewDidLoad() {
        thisDog?.firstTimer = (formattedDate)

            if let dog = thisDog?.toAny() {
                print("Let")
                //THE PROGRAM PRINTS LET
                dogRef.setData(dog)
                //BUT CRASHES HERE
            }
            else {
                print("Error")
            }
        }
    }
}

//Dog Modal Class
class DogEntry {

    var name: String
    var image: String
    var firstTimer: String
    var secondTimer: String
    var walking: Bool = false
    var walkArray: [String]
    var id: String = ""


    init(name: String, image: String, firstTimer: String, secondTimer: String, walking: Bool, walkArray: [String]) {
        self.name = name
        self.image = image
        self.firstTimer = firstTimer
        self.secondTimer = secondTimer
        self.walking = walking
        self.walkArray = walkArray
   }

    init(snapshot: QueryDocumentSnapshot) {
        let snapshotValue = snapshot.data() as [String : Any]
        name = snapshotValue["name"] as! String
        image = snapshotValue["image"] as! String
        firstTimer = snapshotValue["firstTimer"] as! String
        secondTimer = snapshotValue["secondTimer"] as! String
        walking = snapshotValue["walking"] as! Bool
        walkArray = snapshotValue["walkArray"] as! [String]
        id = snapshot.documentID
    }

    func toAny() -> [String: Any] {
        return ["name": name, "image": image, "firstTimer": firstTimer, "secondTimer": secondTimer, "walking": walking, "walkArray": walkArray]
    }
}

1 个答案:

答案 0 :(得分:0)

您的dogRef是一个隐式解包的可选。您需要先给它赋一个值。