2017-04-06 2 views
1

firebaseリアルタイムデータベースを使用してiOS向けの基本的なチャットアプリを構築しています。 メッセージは、最小限の制限があります。 これで、以前の送信メッセージを読み込む機能を実装したいと思います。現在、私はこの機能を使用することによって、これを達成しようとしています:カスタムスタートポイントで限定クエリを受け取ります

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

そして、これは私のデータを与える必要があります:それをちょうど

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

をしかし、このクエリを返す

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

クエリを制限し、開始点を特定の位置に設定しません。ここで

はfirebaseデータベース構造である:

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

誰もがそのような機能を実装する方法についてのアイデアを持って?

答えて

1

私は最終的に私が望むことをする方法を見つけました。 まず、私はFirebaseからデータにアクセスする方法を誤解しました。 これは私がクエリを取得する方法今です:クエリを作成)私は以前に私のカスタムのチャットメッセージ

2に保存されたFireBaseキーを取得)

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

1:

  • ためそれがでキー
  • 最も古いメッセージの末尾を設定します。
  • 配列を希望の長さに照会するように制限します。
その後

実際に私が使用したクエリを取得するために:)

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として、現在の子をキャスト。

関連する問題