我试图从Firebase检索数据,但我遇到了问题。
let refEmployees = Database.database().reference(withPath: "Employees")
refEmployees.child("Logan").observeSingleEvent(of: .value, with: {
snapshot in
let shift = snapshot.value as? String
self.shifts.append(shift!)
self.workSchedule.reloadData()
})
这是我的代码,我的数据库看起来像this。
当我运行它时,我得到了
致命错误:在解包可选值时意外发现nil
有什么想法吗?我很难过。我也可以同时向数据库添加信息,并更改为childAdded
并正确加载信息。
答案 0 :(得分:0)
通常我从不尝试获取引用“withPath”,而是通过child。 我会尝试这样做:
let ref = Database.database().reference().child("Employees").child("Logan")
另一方面,强制解开你不知道实际上会得到的选项,这是一个不好的做法,我会把关闭更改为:
ref.observeSingleEvent(of: .value, with: {
snapshot in
guard let shift = snapshot.value as? String else {
print("Value is Nil or not String")
return
}
self.shifts.append(shift)
self.workSchedule.reloadData()
})
就像评论中的某些人所说,首先打印可选值可能是一个好主意,看看你是否真的从数据库中获得了所需的值。
希望这有帮助
答案 1 :(得分:0)
let refEmployees = Data`base.database().reference()
refEmployees,child("Employees").child("Logan").observeSingleEvent(of: .value, with: {
snapshot in
let shift = snapshot.value! as! [String : AnyObject]
let dictKeys = [String](snapshot.keys)
//Will give you all` keys from DB 0,1,2,3,4,5,6
let dictValues = [AnyObject](snapshot.values)
//will give you` all values "off", "off", "2-10"..."off"
//use keys or values append in array if you want as I could not understand what you are trying to save in self.shifts
self.shifts.append(shift!)
self.workSchedule.reloadData()
})