【发布时间】: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