辞書のキーでテーブルビューをソートするときに問題があります。キーは基本的にタイムスタンプで、私は自分のテーブルの一番上にある最新の投稿を並べ替えようとしています。別のループ内にループがあるか、cellForRowAtIndexPathのソートが間違っているので、テーブルを再読み込みする必要があるかどうかわかりません。私はデータを見ていて、それは最初のループ(フィード内のアイテム用)によって今すぐソートされています。私はループ全体を終了させることはできませんし、辞書内の私のタイムスタンプキーですべてをソートすることはできません。どんな助けでも大歓迎です。辞書のタイムスタンプでTableViewを並べ替える
var posts = [Post]()
func feedPosts(){
for items in feed{
let feedId = items["id"] as! String
ref.queryOrderedByChild("myFeed").queryEqualToValue(“\(feedId)”).observeEventType(.Value, withBlock: { snapshot in
if let snapshot = snapshot.children.allObjects as? [FIRDataSnapshot] {
for snap in snapshot {
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: postDict)
self.posts.insert(post, atIndex: 0)
}
}
}
self.tableView.reloadData()
})
}
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let post = posts.sort({$0.postedDate > $1.postedDate})[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("PostCell") as? FeedPostCell
cell.configureCell(post)
return cell
}
戻りセル
class FeedPostCell: UITableViewCell {
@IBOutlet var feedTxt: UITextView!
var post: Post!
func configureCell(post: Post, img: UIImage? = nil) {
self.post = post
self.feedTxt.text = post.feedTxt
if img != nil {
self.postImg.image = img
}
}
}
データ構造
-posts
- postKey
- myFeed : "123"
- timestamp: 1472596316060
- feedTxt: "Here is my feed text"
タイムスタンプ文字列はどのように見えますか? –
解決策ではありませんが、 'tableView.reloadData()'を呼び出す前に投稿を並べ替えるべきです。そうすれば、配列は 'cellForRowAtIndexPath'が呼ばれるたびにソートされません。 – Carter
@JosephQuigley私のタイムスタンプはミリ秒です。私はfirebase.database.ServerValue.TIMESTAMPを使用します。 – kelsheikh