如何在Swift中Firebase检索UID和自动ID下的数据

时间:2019-05-17 23:25:41

标签: swift firebase firebase-realtime-database

[在此处输入图像描述] [1]我正在尝试从数据库检索特定数据。我想读取product_list中的所有数据

我的数据库

这是我尝试的方法,但是当我打印listName时。它像这样显示listName = nil

 let refList = Database.database().reference().child("Users/Sellers")
        refList.observe(DataEventType.value, with:{(snapshot) in
            if snapshot.childrenCount>0{
                self.listProduct.removeAll()

                for lists in snapshot.children.allObjects as! [DataSnapshot]{
                    let userList = lists.value as? [String: AnyObject]
                    let listName = userList?["name"]
                    let listDetail = userList?["detail"]
                    let listPrice = userList?["price"]
                    print("key = \(listName)")

                    let list = ListModel(name: listName as! String?, detail: listDetail as! String?, price: listPrice as! String?)

                    self.listProduct.append(list)
                }
                self.tableList.reloadData()
            }

        })
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ViewControllerTableViewCell

        let list: ListModel
        list = listProduct[indexPath.row]

        cell.lblName.text = list.name
        cell.lblDetail.text = list.detail
        cell.lblPrice.text = list.price

        return cell
    }

我想检索4件事

(详细信息,名称,价格和product_image_url)

1 个答案:

答案 0 :(得分:0)

现在,您的代码正在/Users/Sellers的子节点上循环,这些子节点是每个用户的节点。您似乎想做的是在每个用户的product_list属性下包含所有节点,这需要一个额外的嵌套循环:

let refList = Database.database().reference().child("Users/Sellers")

refList.observe(DataEventType.value, with:{(snapshot) in
    if snapshot.childrenCount>0{
        self.listProduct.removeAll()

        for user in snapshot.children.allObjects as! [DataSnapshot]{
            let productList = user.childSnapshot(forPath: "product_list")
            for product in productList.children.allObjects as! [DataSnapshot]{
              let userList = product.value as? [String: AnyObject]
              let listName = userList?["name"]
              let listDetail = userList?["details"] // NOTE: also fixed a typo here
              let listPrice = userList?["price"]
              print("key = \(listName)")

              let list = ListModel(name: listName as! String?, detail: listDetail as! String?, price: listPrice as! String?)

              self.listProduct.append(list)

            }
        }
        self.tableList.reloadData()
    }

})