【问题标题】:Firebase Multi Level Database into tableviewFirebase 多级数据库到 tableview
【发布时间】:2017-07-31 01:02:07
【问题描述】:

如何将孩子的数据深入到名称未知的数据库中?

我的示例结构如下。

此代码有效(用于获取快照数据),但我正在对第二个孩子进行硬编码。我不会总是知道这个值(Bus 1)。

    let ref = FIRDatabase.database().reference()
    let usersRef = ref.child("Trips").child("Bus 1")
    usersRef.observeSingleEvent(of: .value, with: { (snapshot) in

        for snap in snapshot.children {
            let userSnap = snap as! FIRDataSnapshot
            let uid = userSnap.key //the uid of each user
            let userDict = userSnap.value as! [String:AnyObject] //child data
            let personOn = userDict["getOn"] as! String
            print("key = \(uid) is at getOn = \(personOn)")
        } 
    })

这将打印:

key = Stop 1 is at getOn = 3
key = Stop 2 is at getOn = 7

我应该采用不同的结构吗?扁平化?

谢谢,如有任何问题,请告诉我。

这是一种更可取的方式,因为我有一个用于 TripDetails 的类,它进入一个数组以加载到表中。但同样,我不知道第二个孩子的名字是什么。

FIRDatabase.database().reference().child("Trips").child("Bus 1").observe(.childAdded, with: { (snapshot) in

        if let dictionary = snapshot.value as? [String: AnyObject] {
            let trip = TripDetails()

            trip.setValuesForKeys(dictionary)
            self.trips.append(trip)


            DispatchQueue.main.async {
                self.tableView.reloadData()
            }

        }
        print(snapshot)
    }, withCancel: nil)

【问题讨论】:

  • 您想要所有巴士的所有站点吗?
  • 好吧,我打算用总线填充 tableView。然后在 detailsViewController 中显示详细信息,其中包含 Stop 1: GetOn/GetOff、Stop 2: GetOn/GetOff 和其他信息。在使用 Bus 1 值使用 didSelectRowAt 之后,我可能会得到该数据。
  • 您可以只观察 FIRDatabase.database().reference().child("Trips") 并保存所有公共汽车和站点信息。与您的第一个查询基本相同,只是多了一个循环。
  • 你能用我上面贴的代码回答这个问题吗?

标签: ios firebase swift3 firebase-realtime-database


【解决方案1】:

我仍然不确定您到底想要什么数据。如果您想要的只是所有数据,您可以这样做。

let ref = FIRDatabase.database().reference().child("Trips")
ref.observeSingleEvent(of: .value, with: { snapshot in
    let enumerator = snapshot.children
    while let bus = enumerator.nextObject() as? FIRDataSnapshot {
        print("\(bus.key)")
        let enumerator = bus.children
        while let stop = enumerator.nextObject() as? FIRDataSnapshot {
            let stopDict = stop.value as? [String: Any]
            let uid = stop.key
            let personOn = stopDict?["getOn"] as? String
            print("key = \(uid) is at getOn = \(personOn)")
        }
    }
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多