2016-08-09 205 views
1

Ich versuche, Daten in Childs von Kindern grundsätzlich zu entpacken. Meine aktuelle Datenbankstruktur sieht wie folgt aus:Abrufen eines Childs-Child in Firebase - Unwrap Unique-Post-IDs

- user-posts 
    - <user-id> 
    - user-data 
    - <unique-post-id> (As a result from childByAutoId) 
     - the data I want to display 
    - <unique-post-id> (As a result from childByAutoId) 
     - the data I want to display 
    ... 
-<user-id> 
    -... 
-<user-id> 
... 

So wie es die eigentlichen Daten Ich möchte sehen ist, abzurufen ist immer ein Kind von <unique-post-id>, der automatisch generiert wird, wenn die Daten in die Datenbank geschrieben werden. Abrufen aus der Datenbank erhalte ich bisher nur:

- <unique-post-id> 
- <unique-post-id> 
- ... 

Gibt es eine Möglichkeit die von auszupacken und ihre Childs angezeigt werden? Was jetzt für mich funktioniert, ist die Anzeige aller eindeutigen Post-IDs, aber ich kann mir nicht vorstellen, wie ich das Kind unter sie bringen kann, und das für alle.

Der Code Ich verwende die Daten abzurufen:

func getQuery() -> FIRDatabaseQuery { 
     let myTopPostsQuery = (ref.child("user-posts")).child(getUid()).child("user-data") 
     return myTopPostsQuery 
    } 

dataSource = FirebaseTableViewDataSource.init(query: getQuery(),cellReuseIdentifier: "Cellident", view: self.tableView) 



dataSource?.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in 
         let snap = obj as! FIRDataSnapshot 

         cell.textLabel?.text = snap.key as String 
        } 
+0

könnten Sie den Code hinzufügen bitte Sie verwenden die Posts abrufen? – adolfosrs

+0

@adolfosrs aktualisiert – ffritz

Antwort

1
dataSource?.populateCellWithBlock { (cell: UITableViewCell, obj: NSObject) -> Void in 
        let snap = obj as! FIRDataSnapshot 

        cell.textLabel?.text = snap.key as! String 
        let childString = snap.value as! String 
        // If the child is another dictionary use `as! [String : AnyObject]` 

       } 

Aber ein anderer Ansatz weitergehen könnte: -

ref.child("user-posts")).child(getUid()).child("user-data").observeEventType(.Value, withBlock: { (snap) in 

     if snap.exists(){ 

     for each in snap as! [String : AnyObject] { 

       let childString = snap.Value as! String 

      } 
     } 
}) 
+0

(bearbeiten) Vielen Dank, der erste Ansatz funktioniert gut! Ich benutze dann diese Zeile, um die Childs zu den Textbeschriftungen zu schreiben: 'lass childString = snap.value as! [String: AnyObject] cell.textLabel? .text = Zeichenfolge (childString) ' – ffritz