Ios Firebase使用获取数据。值观察器不工作

Ios Firebase使用获取数据。值观察器不工作,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,当我尝试在observer中使用.value时,会出现此错误 线程1:致命错误:在展开可选值时意外发现nil @objc func加载_数据(){ Database.Database().reference().child(“食物”).observe(.value){(快照:DataSnapshot)中 如果let dict=snapshot.value as?[字符串:AnyObject]{ 对于snapshot.children中的子对象{ 让FoodimageText=dict[“ima

当我尝试在observer中使用.value时,会出现此错误

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


@objc func加载_数据(){
Database.Database().reference().child(“食物”).observe(.value){(快照:DataSnapshot)中
如果let dict=snapshot.value as?[字符串:AnyObject]{
对于snapshot.children中的子对象{
让FoodimageText=dict[“image”]作为!字符串
让FoodnameText=dict[“name”]作为!字符串
让FoodpriceText=dict[“price”]作为!字符串
让post=FoodModel(foodmagetext:foodmagetext,FoodnameText:FoodnameText,FoodpriceText:FoodpriceText)
self.foodlist.append(post)
self.tableview\u controller.reloadData()
}
}
}
}

[![在此输入图像描述][1][1]

您的类型转换失败。您在访问字典字段时使用了强制类型转换(as!),在实际请求字典中不存在的字段/键时,它将返回nil,并且类型转换到字符串将失败,就像您在那里遇到的那样,或者其中一个字段/键实际上无法类型转换为字符串类型(如果有这样的单词)。希望这能帮到你

提示:最好在for循环之外调用tableView重新加载数据


如果不知道数据库现在的样子,很难给出一个可靠的答案。

在这里使用dict-use-Child而不是dict-use-here,不要在循环外使用强制展开和重新加载数据

@objc func load_data(){
        
        Database.database().reference().child("Food").observe(.value){ (snapshot: DataSnapshot) in
        
              if let dict = snapshot.value as? [String: AnyObject]{
                for child in dict.values {
             if let FoodimageText = child["image"] as? String,
              let FoodnameText = child["name"] as? String,
              let FoodpriceText = child["price"] as? String {
                
              let post = FoodModel(FoodimageText: FoodimageText , FoodnameText: FoodnameText , FoodpriceText: FoodpriceText)
              
                  self.foodlist.append(post)

                  }
               
                
                }
              self.tableview_controller.reloadData()
            }
            
            }
        
          
        }

在堆栈溢出时,不显示代码或文本的图片。将代码复制到问题本身,并将其格式化,以便易于阅读、复制和搜索。明白了。感谢您告知我我不知道它无法从Firebase中定位字段您还必须使用child[“image”]而不是dict[“image],这适用于您尝试通过dict访问的所有密钥。我收到此错误:类型为“NSEnumerator.Element”(也称为“Any”)的值没有订阅我解决了它在快照中替换为child。dict.values中为child的child我还有另一个问题。它将更改的数据添加到以前的数据中。您需要将
.value
更改为
。childAdded
我得到一个空的tableview