【问题标题】:Swift Retrieve Firebase Data from DatabaseSwift 从数据库中检索 Firebase 数据
【发布时间】:2017-07-23 18:46:48
【问题描述】:

我正在尝试从 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,并且信息可以正常加载。

【问题讨论】:

  • 首先在控制台打印快照的值并检查它的类型。在那之后,你的快照被转换成 string 。如果快照不是字符串@slothiness 的类型,那可能是 nil

标签: ios swift firebase firebase-realtime-database


【解决方案1】:

通常我从不尝试获取引用“withPath”,而是通过子获取。 我会尝试这样做:

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

就像 cmets 中的某个人所说的那样,首先打印可选值以查看您是否真的从数据库中获取了所需的值可能是个好主意。

希望对你有帮助

【讨论】:

  • 谢谢!我现在有一个新问题。我现在实际上并没有从数据库中得到任何东西。基本上,我要在一天的时间内加载数小时以转换到表格视图中。只有当我打开应用程序时我还向数据库发送班次时它才有效(例如,我发送班次,它加载正常。不要发送班次,因为我的数据数组为空,所以出现越界错误)。有什么想法吗?
  • @slothiness mmmm,必须查看一些代码才能了解为什么会出现此问题,也许您也将值存储在本地而不是实际上传到数据库?在浏览器上进入 Firebase 数据库时,您的结果是否正在上传?如果您愿意,我们可以为这个问题创建一个小组“聊天”,这样您就可以分享更多代码,让我们能够更好地帮助您!告诉我!
【解决方案2】:
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()
})

【讨论】:

    猜你喜欢
    • 2018-08-04
    • 2018-09-04
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2017-04-17
    相关资源
    最近更新 更多