从数据库读取时发现nil

时间:2019-07-31 05:16:58

标签: swift firebase firebase-realtime-database

尝试从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"
          },    

这是怎么回事?

2 个答案:

答案 0 :(得分:1)

我认为,请更改此代码行

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

收件人:

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

那你就不会出错了。

希望获得帮助。

答案 1 :(得分:0)

我认为由于self.objectAmount.append(dict["amount"] as! String)而导致崩溃。 您尝试执行以下代码:self.objectAmount.append(dict["amount"] as! Int)