使用 .value observer 获取数据的 Firebase 不起作用



当我尝试在观察器中使用 .value 时出现此错误

线程 1:致命错误:解开可选值时意外发现 nil


@objc func load_data(){

Database.database().reference().child("Food").observe(.value){ (snapshot: DataSnapshot) in

if let dict = snapshot.value as? [String: AnyObject]{
for child in snapshot.children {
let FoodimageText = dict["image"] as! String
let FoodnameText = dict["name"] as! String
let FoodpriceText = dict["price"] as! String

let post = FoodModel(FoodimageText: FoodimageText , FoodnameText: FoodnameText , FoodpriceText: FoodpriceText)

self.foodlist.append(post)
self.tableview_controller.reloadData()

}
}

}


}

[!在此处输入图像描述][1]][1]

类型转换失败。您在访问字典字段时使用了强制类型转换(as!(,当您实际请求字典中不存在的字段/键时,它将返回 nil 并且类型转换为 String 将失败,就像您在那里遇到的那样,或者其中一个字段/键实际上不是类型可转换的(如果有这样的词(到字符串类型。希望这对您有所帮助...

提示:您最好在 for 循环之外调用 tableView 重新加载数据。

如果不看到您的数据库现在是什么样子,就很难给您一个可靠的答案。

而不是字典在这里使用 child,不要使用强制解包和重新加载循环外的数据

@objc func load_data(){

Database.database().reference().child("Food").observe(.value){ (snapshot: DataSnapshot) in

if let dict = snapshot.value as? [String: AnyObject]{
for child in dict.values {
if let FoodimageText = child["image"] as? String,
let FoodnameText = child["name"] as? String,
let FoodpriceText = child["price"] as? String {

let post = FoodModel(FoodimageText: FoodimageText , FoodnameText: FoodnameText , FoodpriceText: FoodpriceText)

self.foodlist.append(post)
}


}
self.tableview_controller.reloadData()
}

}


}

最新更新