基本上我正在尝试创建一个类似Twitter的应用程序,显示您关注的人的状态更新,按日期排序,就像推特一样。我怎样才能做到这一点?我有用于在表格视图中显示帖子的代码,但是排序完全混乱并且看起来很随机。我有一个名为posts的路径,带有autoID路径,包含消息,日期和发件人。如果没有按照新的>顺序显示日期,这怎么可能呢?旧,但也显示消息和发件人?
提前致谢。
root
posts
autoID
sender
message
timestamp
users
UID
username
答案 0 :(得分:3)
问题有点不清楚,但如果你想填充tableView,你需要从Firebase获取数据,填充数组(dataSource),然后重新加载tableView。
首先,我们需要设置一个.ChildAdded观察器来将数据加载到messagesArray中,该消息用作tableView数据源
class AppDelegate: NSObject, NSApplicationDelegate {
var messagesArray = [[String:String]]() //an array of dicts, tableView datasource
var initialLoad = true
以及最初加载数据然后查看添加的消息的代码
messagesRef.observeEventType(.ChildAdded, withBlock: { snapshot in
let dict = [String: String]()
dict["date"] = snapshot.value("date")
dict["msg"] = snapshot.value("message")
dict["sender"] = snapshot.value("sender")
self.messagesArray.append(dict)
if ( self.initialLoad == false ) { //upon first load, don't reload the tableView until all children are loaded
self.itemsTableView.reloadData()
}
})
然后 - 这是很酷的部分......
//this .Value event will fire AFTER the child added events to reload the tableView
// the first time and to set subsequent childAdded events to load after each child
// is added in the future
messagesRef.observeSingleEventOfType(.Value, withBlock: { snapshot in
print("inital data loaded so reload tableView! \(snapshot.childrenCount)")
self.messagesTableView.reloadData()
self.initialLoad = false
})
使用上面的代码,数据的顺序是按键 - 如果这些键是由Firebase生成的,它们将按照创建消息的顺序顺序。
然后从messagesArray中填充您的tableView,您可以选择要放入tableView列的日期,消息和发件人,或者您希望填充您的cellView。
你的另一个要求就是让它们按日期排序,降序。这是一个非常棒的问题,在这里有答案 - 这是一个两部分问题,但你会看到思考过程。
In Firebase, how can I query the most recent 10 child nodes?
您还希望利用Firebase查询功能来获取您想要的特定数据,而不是上面的常规数据......
messagesRef.queryOrderedByChild("date").observeEventType(.ChildAdded, withBlock: {
snapshot in
//create a dict from the snapshot and add to tableview
})
答案 1 :(得分:0)
您目前正在收到Firebase中的所有帖子,这些帖子可能会按照添加的顺序排序,您可以按照这样的方式指定结果的顺序,
firebase.queryOrderedByChild("posts/publishedDate").observeEventType(FEventType.Value, withBlock: { (snapshot:FDataSnapshot!) in
self.firebaseUpdate(snapshot)
})
我在使用Objective-c示例firebase提供的时候直接转换了它,所以可能需要一些调整。
您也可以在收到结果后对本地结果进行排序,但您可能需要将listOfMessages作为包含排序字段的字典,类或结构数组,然后您可以使用谓词或过滤器对数组进行排序。
答案 2 :(得分:0)
对于Swift 3:
更改。 queryOrderedByChild(' timestamp') .queryOrdered(byChild:" timestamp")