2017-04-06 17 views
1

我正在用swift爲iOS構建一個基本的聊天應用程序,其中包含Firebase實時數據庫。 消息的觀察範圍至少爲10. 現在,我想實現加載早期發送消息的功能。我目前正試圖通過使用此功能來實現這一目標:用自定義起始點接收有限查詢

let query = threadRef.child("messages").queryOrderedByKey().queryStarting(atValue: "2").queryLimited(toLast: 2) 

它返回這個查詢:

(/vYhNJ3nNQlSEEXWaJAtPLhikIZi1/messages { 
    i = ".key"; 
    l = 2; 
    sp = 2; 
    vf = r; 
}) 

,這應該給我的數據:剛剛

query.observeSingleEvent(of: .value, with: { (snap) in 

但限制查詢並且不將起始點設置爲特定位置。

這裏是火力數據庫結構:

messages 
    -Kgzb3_b26CnkTDglNd8 
    date: 
    senderId: 
    senderName: 
    text: 
    -Kgzb4Qip6_jQdKRWFey 
    -Kgzb4ha0KZkLZeBIaxW 
    -Kgzb577KlNKOHxsQo9W 
    -Kgzb5cqIVMhRmU019Jf 

人對如何實現這樣一個功能的想法?

回答

1

好吧,我終於找到了一種方法來做我想要的。首先我誤解了從Firebase訪問數據的方式。 這是現在我怎麼得到查詢:

let indexValue = messages.first?.fireBaseKey 
let query = messageRef.queryOrderedByKey().queryEnding(atValue:indexValue).queryLimited(toLast: 3) 

1)得到我先前保存到我的自定義聊天消息

2)構造查詢的火力鍵:通過

  • 爲了它鍵
  • 將結尾設置爲最早的消息
  • 限制數組以查詢所需的長度

然後,爲了得到我所使用的查詢:

query.observeSingleEvent(of: .value, with: { snapshot in 
    for child in snapshot.children.dropLast().reversed() { 
     let fireSnap = (child as! FIRDataSnapshot) 
     //do stuff with data 
    } 
}) 

1)得到查詢作爲一個單一的事件

2)迭代的孩子,我需要dropLast(),以確保我不沒有任何重複的信息並將其反轉以獲得正確的順序。

3)投了當前孩子的FIRDataSnapshot訪問數據

因爲我無法找到一個簡單的例子,所以我想離開這裏我的解決方案櫃面運行到同一問題的其他人。