2017-08-02 45 views
0

使用火力地堡和斯威夫特SDK如何知道孩子加入其索引的有序FirebaseQuery

我剛開始用火力地堡,想顯示由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。我的問題是:是否有任何mecanism給我們DataSnapshot的新插入位置?

DataEventType.childMoved同樣的問題:我們知道快照已經移動,但是如何知道它已經移動了?

+0

我想你不知道,因爲你沒有獲得有關添加/移回快照的信息。你可以做的是每次.childAdded .childMoved被調用,根據你的屬性對結果進行排序並重新加載tableview。 – ZassX

+0

這是一個解決方案,但它看起來太多了:按照查詢已經執行的順序排序,我不應該再這樣做。它也阻止我在表格視圖上進行細粒度更新(通過移動/插入動畫) – PhilippeAuriach

回答

0

我終於結束了使用FirebaseUI,特別是子模塊FirebaseDatabaseUI(見GitHub的回購here) 他們提供了一個FUITableViewDataSource,您只需創建一個查詢,並把它傳遞給它,它會處理這樣的排序等等。我也用一切FUIArray,它只是一個查詢支持的數組,帶有一個用於添加/刪除/移動/更新事件(以及適當的索引)的委託。

相關問題