2017-05-23 2 views
0

Ich versuche, einige Daten mithilfe der Beobachtung (. ChildAdded) abrufen, um die neuen "Beiträge" meines Projekts und fügen Sie es in der Tabellenansicht korrekt. Ich habe tatsächlich das Ergebnis, das ich brauche, mit dieser Funktion.Holen Sie Daten von firebase mit childAdded in firebase

 databaseHandle = ref?.child("Posts").observe(.childAdded, with: { (snapShot) in 

     let post = snapShot.value as? String 
     if let actualPost = post { 

      self.postData.insert(actualPost, at: 0) 
      self.tableView.reloadData() 
     } 

    }) 

Aber es funktioniert nur für ein Kind, das einen Wert darauf wie diese in Firebase hat:

*Root 
    *Posts 
    *ChildByAutoId: "post text value" 

Eigentlich, was ich möchte haben, ist ein Kind mit Attributen wie folgt aus:

Ich möchte das gleiche Ergebnis haben wie .observe (.childAdded), aber ich kann es nicht tun. Die einzige Art, wie ich, dass seine Zeit gefunden arbeiten, ist dies:

func recuperarData(){ 
    let ref = self.ref 

    ref?.child("Posts").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapShot) in 
     if let posts = snapShot.value as? [String : AnyObject]{ 
      for (_, value) in posts{ 
       let post = Posts() 

       if let autor = value["Author"] as? String ,let likes = value["Likes"] as? Int, let fecha = value["CreationDate"] as? String, let postId = value["PostID"] as? String, let texto = value["Text"] as? String, let userID = value["UserId"] as? String { 
        post.autor = autor 
        post.likes = likes 
        post.fecha = fecha 
        post.PostId = postId 
        post.texto = texto 
        post.UserId = userID 
        self.posts.append(post)       
       }      
      } 
      self.tableView.reloadData() 
     }    
    })   
    ref?.removeAllObservers() 
} 

Aber das alle Daten nur abrufen Sobald jedes Mal, wenn ich den Tableview „reload“ und fügen Sie nicht die Beiträge richtig in der Reihenfolge ich will.

Kennt jemand eine korrekte Möglichkeit, diese Daten mit .observe (.childAdded) abzurufen, damit ich die Tabellenansicht automatisch aktualisieren kann.

Ich verwende Xcode 8.2.1 und schnellen 3 Dank

+0

https://firebase.google.com/docs/database/ios/read-and-write –

+0

Danke @NitinGohel, aber ich kann nicht den richtigen Weg finden, ich ritt bereits die Firebase-Dokumentation, aber es ist immer noch schwer für mich. – Andrew

+0

Wenn Sie sagen, dass Sie nicht beobachten können (.childAdded), können Sie näher erläutern, was passiert, wenn Sie versuchen, es zu verwenden? Weil, von dem, was ich gerade sehe, ist es unklar, warum Sie .childAdded nicht einfach verwenden und ein Wörterbuch aus dem Snapshot erstellen können. Ein bisschen mehr Informationen würden mir helfen zu wissen, warum es nicht funktioniert. –

Antwort

0

Ich bin schockiert niemand in der Lage war, das Problem in Ihrer ursprünglichen .childAdded Funktion zu rufen.

let post = snapShot.value as? String ist das Problem.

Firebase-Datenbank ist eine Schlüssel/Wert-Paarung, so dass Sie nicht einfach das gesamte Ergebnis in einen String umwandeln können. Sie haben dieses Problem behoben, indem Sie es in ein Wörterbuch umgewandelt haben, als Sie .value getan haben. Tun Sie dasselbe in der .childAdded Funktion.

Ich hatte eine ähnliche answer erklären Wörterbuch Handhabung in Firebase.

Verwandte Themen