2017-05-23 22 views
0

私のプロジェクトの新しい「投稿」を取得し、それを正しくtableviewに追加するために、observe(.childAdded)を使ってデータを取得しようとしています。 私は実際にこの関数を使用して必要な結果を得ました。firebaseのchildAddedを使用して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() 
     } 

    }) 

しかし、それは唯一のFireBaseでこのようなことの価値を持っている子供のために働く:

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

実際に私がしたいのですが、このような属性を持つ子である:

*Root 
    *Posts 
    *ChildByAutoId 
     -Text: "post text value" 
     -UserId: "userId" 
     -CreationDate: "date" 
     -PostId: "PostId" 
     -Likes: Int 
     -Author: "name" 

.observe(.childAdded)を使用した場合と同じ結果を得たいと思いますが、できません。私はその現在作業ことがわかっ 唯一の方法はこれです:

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() 
} 

しかし、これは私がテーブルビューを「リロード」と私が欲しいために正しく記事を追加しませんたびに一度、すべてのデータを取得します。

誰かが.observe(.childAdded)を使用してこのデータを取得する正しい方法を知っていますので、テーブルビューを自動的にアップグレードできます。

私は誰もがあなたの元.childAdded機能に問題を呼び出すことができませんでしたショックを受けていますXcodeの8.2.1および迅速な3つの おかげ

+0

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

+0

@NitinGohelに感謝しますが、私は正しい方法を見つけることができません。すでにFirebaseのドキュメントには載っていますが、それでも私にとっては難しいものです。 – Andrew

+0

あなたがobserve(.childAdded)を使用することができないと言うとき、あなたはそれを使用しようとするとき何が起こるかを詳しく説明できますか? .childAddedを使用してスナップショットから辞書を作成するだけではわからないので、今見ているところからは分かりません。もう少し情報があれば、なぜそれが機能していないのか分かります。 –

答えて

0

を使用しています。

let post = snapShot.value as? Stringが問題です。

Firebaseデータベースはキーと値のペアであり、結果全体を文字列にキャストできません。 .valueを実行するときにこの問題を辞書にキャストすることで修正しました。 .childAdded機能で同じことをしてください。

私はFirebaseの辞書処理を説明するのと同じようなanswerを持っていました。

関連する問題