2017-03-09 63 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)") 
     } 
    } 
}) 
相關問題