Swift从数据库中检索Firebase数据

时间:2017-07-23 18:46:48

标签: ios swift firebase firebase-realtime-database

我试图从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并正确加载信息。

2 个答案:

答案 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()
})