按降序过滤时向 Firebase 观察者添加新帖子
Posted
技术标签:
【中文标题】按降序过滤时向 Firebase 观察者添加新帖子【英文标题】:Adding New Posts to Firebase observer when filtering by descending time 【发布时间】:2016-10-09 17:42:48 【问题描述】:所以我有一个供用户发布的提要,并希望每个新提交的内容都位于我的收藏视图的顶部。我使用此处显示的 UTC 时间的负值按时间降序排列每个新帖子:How do you properly order data from Firebase chronologically。
"Posts" :
"-KHLOy5mOSq0SeB7GBXv" :
"timestamp" : "1476028495915",
"descendStamp": "-1476028495915"
"otherData": ""
,
"-KHLrapS0wbjqPP5ZSUY" :
"timestamp" : "1476028496102"
"descendStamp" : "-1476028496102"
"otherData": ""
,
但是,添加的每个新实时帖子在最初加载时都会放在底部。相信这是因为观察者只是异步加载新添加的孩子,而不是再次下载任何其他信息,这导致它忽略了我的
.queryOrderedByChild("descendStamp")
离开并返回视图后,它会将最近添加的帖子正确组织到顶部。我是否需要客户端过滤才能实时将这些新帖子放在顶部?或者,随着新帖子的出现,重新组织帖子顺序的最佳方法是什么?
var posts = [PostModel]()
let postQuery = ref.child("Posts").queryOrderedByChild("descendStamp")
postQuery.observeEventType(.ChildAdded, withBlock: (snap) in
if snap.exists()
let postData = snap.value! as! [String: AnyObject]
let post = PostModel()
post.timestamp = postData["timestamp"] as? NSTimeInterval
post.descendStamp = postData["descentStamp"] as? NSTimeInterval
post.otherData = postData["otherData"] as? String
self.posts.append(post)
dispatch_async(dispatch_get_main_queue(),
self.collectionView!.reloadData()
)
【问题讨论】:
【参考方案1】:只需在更新 tableView 之前对数据源进行排序。
self.posts.sort(by: $0.descendStamp > $1.descendStamp)
您的代码将如下所示:-
var posts = [PostModel]()
let postQuery = ref.child("Posts").queryOrderedByChild("descendStamp")
postQuery.observeEventType(.ChildAdded, withBlock: (snap) in
if snap.exists()
let postData = snap.value! as! [String: AnyObject]
let post = PostModel()
post.timestamp = postData["timestamp"] as? NSTimeInterval
post.descendStamp = postData["descentStamp"] as? NSTimeInterval
post.otherData = postData["otherData"] as? String
self.posts.append(post)
self.posts.sort(by: $0.descendStamp > $1.descendStamp)
dispatch_async(dispatch_get_main_queue(),
self.posts.sort(by: $0.descendStamp > $1.descendStamp)
self.collectionView!.reloadData()
)
【讨论】:
我就不能这样排序,因为它是一本字典吗?也是 swift 3 的语法。我目前正在使用 swift 2.3 什么是PostModel
?不是结构体吗?
不,这是我的模型邮政单元格的一个类。这有什么不同吗?
这行不行?如果不行,将您的 PostModel 类转换为结构。
我将其更改为结构,但仍不确定如何将帖子从字典更改为允许您在答案中提到的排序以上是关于按降序过滤时向 Firebase 观察者添加新帖子的主要内容,如果未能解决你的问题,请参考以下文章
Firebase 按降序对数据进行排序。 (只排序了一半。)
如何在 Firebase 中按降序排列数据 - Python
如何在Android Firebase实时数据库中按降序获取孩子[重复]