【问题标题】:Save/retrieving data from firebase snapshot从 Firebase 快照保存/检索数据
【发布时间】:2019-06-15 07:40:37
【问题描述】:

我正在尝试保存用户订购的商品并在另一端获取信息,但是在检索数据时,它似乎不再是字典,我无法访问订单中的商品。

这是我用来保存数据的东西

for (i,item) in currentOrder.enumerated().reversed(){

restaurantRef.child("order").child("dish\(i+1)").updateChildValues([
    "dishName": item.name,
    "dishPrice": item.price,
    "dishQuantity": item.quantity,
    "servWFood": item.servWithFood
    ])

} 这是正在发送的内容的 print():

["dishName": "Baked Ricotta and Pancetta Tarts", "servWFood": false, "dishQuantity": 1, "dishPrice": 18.0]
["dishName": "Water", "servWFood": false, "dishQuantity": 1, "dishPrice": 10.0]

这是发送数据后数据库的外观: Database img

这是我用来检索数据的:

let ref = Database.database().reference().child("Restaurants").child(restaurantUid).child("Tables")

ref.observe(.childChanged) { (snapshot) in

if let dictionary = snapshot.value as? [String:AnyObject]{
    
    if let orders = dictionary["order"] as? NSDictionary{
        
        for item in orders{
            print("item \(item)")
         
            
        }
    }
}

item的值为:

item (key: "dish3", value: {
    dishName = "Steak and Tomato Panzanella";
    dishPrice = 25;
    dishQuantity = 1;
    servWFood = 0;
})

我想获得这 4 道菜的每一个信息,但一直没有。

如果有任何帮助,我将不胜感激!谢谢:)

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    试试这个以获得“RestTable1”的订单:

    let ref = Database.database().reference().child("Restaurants").child(restaurantUid).child("Tables").child("RestTable1").child("order")
    
    ref.observe(.value) { (snapshot) in
        if let orderChildSnapshots = snapshot.children.allObjects as! [DataSnapshot] {
            for dish in orderChildSnapshots {
                print("dish: \(dish.key)")
    
                ref.child(dish.key).observeSingleEvent(of: .value) { (dishSnapshot) in
                    if let dict = dishSnapshot.value as? [String: AnyObject] {
                        let name = dict["dishName"] as? String
                        let price = dict["dishPrice"] as? Int
    
                        print("dishName: \(name)")
                        print("dishPrice: \(price)")
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 我仍然以相同的格式获得它们。打印()输出:item Snap (dish1) { dishName = "Pear, Brie and Prosciutto Wedges"; dishPrice = 12; dishQuantity = 1; servWFood = 0; }
    【解决方案2】:

    显然,在拿到订单中的物品后,我只是错过了下一级。

                    if let orders = dictionary["order"] as? [String:AnyObject]{
    
                    for items in orders{
    
                        if let item = orders[items.key] as? [String:AnyObject]{
                            let dishName = item["dishName"] as? String
                            let dishPrice = item["dishPrice"] as? Double
                            let dishQuantity = item["dishQuantity"] as? Int
                            let servWFood = item["servWFood"] as? Bool
    
                            print("dishName \(dishName), dishPrice: \(dishPrice), dishQuantity: \(dishQuantity), servWFood: \(servWFood)")
    
                        }
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-13
      • 2021-05-07
      • 1970-01-01
      • 2021-07-04
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多