0
私はその投稿に投稿とコメントを持つアプリを作っています。しかし、ユーザーが投稿/コメントを投稿するたびに、UITableViewに読み込まれた後に投稿された順に表示されません。投稿とコメントにタイムスタンプを実装しましたが、どのように並べ替えるのか分かりません。Firebaseデータベースを年代順に並べ替えるにはどうしたらいいですか?
マイデータベース:
"posts" : {
"47CCC57D-9056-4F5B-919E-F686065574A2" : {
"comments" : {
"99838A46-A84E-47E9-9D9C-E048543DC7C9" : {
"comment" : "Would you trade for a red one?",
"timestamp" : 1488315280579,
"commentID" : "99838A46-A84E-47E9-9D9C-E048543DC7C9",
"username" : "user"
}
},
"description" : "Don't really need this anymore. Willing to go for less if I can get a trade",
"image" : "JLMzSuhJmZ.jpeg",
"postID" : "47CCC57D-9056-4F5B-919E-F686065574A2",
"price" : "$5",
"rating" : "8",
"title" : "title",
"uid" : "5U1TnNtkhegmcsrRt88Bs6AO4Gh2",
"username" : "user"
},
がどのように私はCommentViewController
にコメントをソートするatttemptingています:
var postDetails: String?
var posts = NSMutableArray()
func loadData() {
FIRDatabase.database().reference().child("posts").child(postDetails!)
.child("comments").queryOrdered(byChild: "timestamp")
.observeSingleEvent(of: .value, with: { snapshot in
if let postsDictionary = snapshot.value as? [String: AnyObject] {
for post in postsDictionary {
self.posts.add(post.value)
}
self.tableView.reloadData()
}
})
}
// Displays posts in postsDetailsTableView
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) as! CommentTableViewCell
// Configure the cell...
let post = self.posts[indexPath.row] as! [String: AnyObject]
cell.selectionStyle = .none
cell.commentLabel.text = post["comment"] as? String
cell.usernameLabel.text = post["username"] as? String
return cell
}
}
私は各コメントは、それが投稿された順になるように何ができるの?
ありがとうございます。 'func loadData'をあなたの例で置き換えるべきですか、あるいは既存の関数にコードを追加すべきですか?いずれかの方法で – gabe
@gabe明らかに正しい順序を示すためのprint文を削除し、配列に必要なものを追加するコードに置き換える必要があります。そのループが完了したら、self.tableView.reloadData()を実行します。キーは正しい順序を維持するためにsnapshot.childrenを反復処理しています。 – Jay