私のプロジェクトの新しい「投稿」を取得し、それを正しく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つの おかげ
https://firebase.google.com/docs/database/ios/read-and-write –
@NitinGohelに感謝しますが、私は正しい方法を見つけることができません。すでにFirebaseのドキュメントには載っていますが、それでも私にとっては難しいものです。 – Andrew
あなたがobserve(.childAdded)を使用することができないと言うとき、あなたはそれを使用しようとするとき何が起こるかを詳しく説明できますか? .childAddedを使用してスナップショットから辞書を作成するだけではわからないので、今見ているところからは分かりません。もう少し情報があれば、なぜそれが機能していないのか分かります。 –