【问题标题】:Finding nil when reading from database从数据库读取时发现 nil
【发布时间】:2019-07-31 14:01:05
【问题描述】:

当尝试从 Firebase 读取时,我得到了

致命错误:在展开可选值时意外发现 nil

读取数据库的代码:

ref = Database.database().reference().child("userDatabases").child(userID!).child("-Lk__eup2Z7WR-iqtXkI").child("-Lk__gmhOTWfVzEPVo2t")    

    ref?.observeSingleEvent(of: .value, with: { (snapshot) in
                for child in snapshot.children.allObjects as! [DataSnapshot] {

                  let dict = child.value as? [String : AnyObject] ?? [:]

                    self.objectProducer.append(dict["objectProducer"] as! String)
                    self.objectType.append(dict["objectType"] as! String)
                    self.objectAmount.append(dict["amount"] as! String)
                    self.objectMeasureUnit.append(dict["unit"] as! String)
                }
            })

如果我尝试打印例如:print(dict["objectProducer"]),我会得到正确的结果。

我尝试读取的 FirebaseStructure 如下所示:

 "-Lk__eup2Z7WR-iqtXkI" : {
          "-Lk__gmhOTWfVzEPVo2t" : {
            "5740700998485" : {
              "amount" : "330",
              "objectProducer" : "Coca Cola",
              "objectType" : "Zero",
              "unit" : "Milliliter"
            },
            "createdOn" : "24-7-2019 at: 22:5:35",
            "listID" : "-Lk__gmhOTWfVzEPVo2t",
            "name" : "Test"
          },    

这里出了什么问题?

【问题讨论】:

  • 我认为 child(userID!).child(-Lk__eup2Z7WR-iqtXkI).child(-Lk__gmhOTWfVzEPVo2t) 需要是字符串。 child(userID!).child("-Lk__eup2Z7WR-iqtXkI").child("-Lk__gmhOTWfVzEPVo2t")
  • @108g 很抱歉不清楚。它们是字符串。它们从以前的UIViewController 作为字符串传递,并放入变量中。我只是用一个值(childByAutoID)替换了它们,所以为了问题的目的,阅读的路径应该是清晰的。

标签: swift firebase firebase-realtime-database


【解决方案1】:

在我看来,改变这行代码

let dict = child.value as? [String : AnyObject] ?? [:]

到:

guard let dict = child.value as? [String: AnyObject] else { return }

那么你就不会出错了。

跳这个帮助。

【讨论】:

  • 这行得通。但我不确定我理解为什么它首先崩溃了?我要求的价值观显然存在。
  • 因为你的dict值可以是nil,所以当你像这样使用nil值时。 self.objectProducer.append(dict["objectProducer"] as!String) 程序每次都会崩溃。每次您应该使用可选链接检查该值。现在可以了吗兄弟?
【解决方案2】:

我认为崩溃是由于self.objectAmount.append(dict["amount"] as! String)。 你试试执行代码:self.objectAmount.append(dict["amount"] as! Int)

【讨论】:

    猜你喜欢
    • 2015-09-26
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多