如何知道子项添加到有序FirebaseQuery的索引

时间:2017-08-02 14:54:05

标签: swift firebase

使用Firebase和Swift SDK

我刚开始使用Firebase,想要显示last_update排序的对话列表。以下查询正常工作:

let query = Database.database().reference().child("chat").child("channels").queryOrdered(byChild: "last_update")

query.observe(DataEventType.childAdded) { (snapshot: DataSnapshot) in
    if let value = snapshot.value as? [String: Any?] {
        log.debug("added channel: \(snapshot.key) : \(value)")
        //add object to array, insertRow in tableview
    }
}

第一次加载我的视图时,每个项目都以查询指定的正确顺序到达,因此显示正常。但是如果我创建一个新的通道,它确实出现在tableview的末尾,因为我只是在数组的末尾添加它,只是在我的表视图上调用insertRow。我的问题是:是否有任何机制可以为我们提供DataSnapshot的新插入位置?

DataEventType.childMoved的同样问题:我们知道快照已移动,但如何知道它已移动到哪里?

1 个答案:

答案 0 :(得分:0)

我最终使用FirebaseUI,尤其是子模块FirebaseDatabaseUI(参见github repo here) 他们提供了一个FUITableViewDataSource,您只需创建一个查询并将其传递给它,它将处理排序等所有内容。我还使用了FUIArray,它只是一个由查询支持的数组,带有添加/删除/移动/更新的委托事件(和适当的索引)。