我在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)
如果我将这一行注释掉,那么它将在下一行崩溃...
答案 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