如果将方法放入viewDidLoad(),为什么应用程序会崩溃?

时间:2018-12-06 22:00:59

标签: ios swift firebase

我在viewDidLoad()中放置了一个方法,当应用程序运行时它运行良好。它在数据库中读写数据。但是,当我进入那个特定的视图控制器时,它崩溃了!

错误:

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

但是从下面的图片中可以看出,它并不为空

为什么会崩溃?是因为我认为它加载了吗?

编辑

这是放置在viewDidLoad中的方法:

let historyRef = ref.child("history")
    historyRef.observe(.value) { (snapshot) in
        if snapshot.exists() {
            for history in snapshot.children {
                let snap = history as! FIRDataSnapshot
                let dict = snap.value as! [String: Any]
                print("dict: \(dict)")
                let historyKey = snap.key
                print("History Key: \(historyKey)")

                    // fetch ride information ......

                let historyDB : FIRDatabaseReference = self.ref.child("history").child(historyKey)
                historyDB.observe(.value) { (snapshot) in
                    if snapshot.exists() {
                        let rideId = snap.key // ... rideId
                        print("rideId: \(rideId)")

                        var distance = dict["distance"] as! Double // distance
                        distance = Double(round(1000 * distance)/1000)

                        let riderPaid = dict["riderPaid"] as! Bool // riderPaid
                        var ride_price = dict["ride_price"] as! Double // price before fees
                        var ryyde_fees = dict["ryyde_fees"] as! Double // ryyde_fees
                        var driver_payout = dict["driver_payout"] as! Double // driver_payout

                        if  riderPaid == true {
                            ride_price = Double(round(1000 * ride_price)/1000)
                            print("Ride Price: $ \(ride_price)")
                            ryyde_fees = Double(round(1000 * (ride_price * 0.25))/1000)
                            print("Ryyde Fees: $ \(ryyde_fees)")
                            driver_payout = Double(round(1000 * (ride_price - ryyde_fees))/1000)
                            print("Driver Payout: $ \(driver_payout)")

                            self.balance = self.balance + driver_payout
                            self.txtBalance.text = (String(format: "$ %.2f", self.balance))

                        }
                    }
                }
            }
        }
    }

崩溃的行是:

var distance = dict["distance"] as! Double // distance
distance = Double(round(1000 * distance)/1000)

如果我将这一行注释掉,那么它将在下一行崩溃...

results

1 个答案:

答案 0 :(得分:0)

进行一些更改,这似乎可行:

 let riderPaid: Bool = (dict["riderPaid"] != nil)// riderPaid
                        print("riderPaid: \(riderPaid)")
                        var ride_price: Double = dict["ride_price"] as? Double ?? 0.0  // price before fees
                        var ryyde_fees: Double = dict["ryyde_fees"] as? Double ?? 0.0 // ryyde_fees
                        var driver_payout: Double = dict["driver_payout"] as? Double ?? 0.0 // driver_payout