2017-03-09 33 views
1

如何将数据从更深的儿童获取到名称未知的数据库中?将Firebase多级别数据库导入到表格视图

我的示例结构如下。

enter image description here

此代码(获取快照数据),但我硬编码的第二个孩子。我不会总是知道这个值(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) 
+0

你想要所有的巴士站? –

+0

那么,我打算用总线填充tableView。然后使用Stop 1:GetOn/GetOff,Stop 2:GetOn/GetOff和其他信息在detailsViewController中显示详细信息。在使用使用总线1值的didSelectRowAt之后,我可能会获得这些数据。 –

+0

您可以只观察FIRDatabase.database()。reference()。child(“Trips”)并保存所有总线并停止信息。基本上与第一个查询相同,只需一个额外的循环。 –

回答

0

我还是不确定你想要什么数据。如果你只想要所有的数据,你可以做到这一点。

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)") 
     } 
    } 
}) 
相关问题