firebaseに格納されている投稿をテーブルビューに読み込もうとしています。 .childAdded関数を使用して投稿を(最初から最後まで)投稿した順番で取得します。最初はうまくいったように見えましたが、今はもう動作しません。理由はわかりません。だから私は、投稿にタイムスタンプを追加し、queryOrderedByChild( "タイムスタンプ")を使用しました。まだ間違った順序だ!ここに私のコードは次のとおりです。クエリの最初のタイムスタンプ値の印刷が出しFirebaseのスナップショットが間違っている
posts.removeAll()
let ref = FIRDatabase.database().reference()
ref.child("Posts").queryOrderedByChild("timestamp").observeEventType(.ChildAdded, withBlock: { (snapshot:FIRDataSnapshot) in
print(snapshot.value!["timestamp"] as! Int)
if snapshot.value == nil {
return
}
let post = Post()
post.title = snapshot.value!["Title"] as? String
post.postType = snapshot.value!["postType"] as? Int
post.postDescription = snapshot.value!["Description"] as? String
if post.postType == 2 {
post.imageAURL = snapshot.value!["imageAURL"] as? String
post.imageBURL = snapshot.value!["imageBURL"] as? String
}else if post.postType == 3 {
post.imageAURL = snapshot.value!["imageAURL"] as? String
post.imageBURL = snapshot.value!["imageBURL"] as? String
post.imageCURL = snapshot.value!["imageCURL"] as? String
}
let createdByID = snapshot.value!["createdBy"] as! String
var username = String()
let usernameRef = FIRDatabase.database().reference().child("users").child(createdByID)
usernameRef.observeSingleEventOfType(.Value, withBlock: { (snapshot:FIRDataSnapshot) in
username = snapshot.value!["username"] as! String
post.createdBy = username
self.posts.append(post)
self.tableView.reloadData()
}, withCancelBlock: nil)
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
})
}, withCancelBlock: nil)
}
:
1471008028
1471007899
1471007928
1471007979
を見てわかるように、最初のIntは、次の3つがあり、最高です昇順で正しく注文されていますが、なぜ最初は最高で最後ではないのですか?私はそれが何かと関係があるかどうかはわかりませんが、コードはviewDidLoadの内部で呼び出される関数の中にあります。
私は、異なるユーザーアカウントから投稿を投稿しました。私は今気づいた、現在ログインしているユーザーの投稿は、常に最初に読み込まれたものですが、なぜですか?つまり、別のユーザーとしてログインして再度シミュレータを起動すると、順序が変更されますが、.ChildAdded関数はログインしたユーザーに関係なく、すべての投稿をロードするだけなので、 –
これは[以前](http://stackoverflow.com/a/15723418/6680611)と尋ねられ、回答されています。 – cartant
私は答えがちょっと古くて、間違っていれば正しいと思います。また、迅速にサンプルがないので、誰かが迅速な解決策を持っていたり、コードを編集して、それをやり遂げなければならない場合には素晴らしいかもしれません。 –