bugfix> ios > 投稿

Firebaseを使用してチャットします。

特定の時間からすべてのメッセージを取得したい。 しかし、Firebaseからのメッセージは1つだけです。

ここに私のコードがあります:

[[[_conversationDBRef queryOrderedByChild:@"time"] queryStartingAtValue:@(time)] observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
        for (FIRDataSnapshot* child in snapshot.children) {
            NSDictionary* msgData = child.value;
            NSLog(@"msgData: %@", msgData);
        }
    }];

クエリ:

(lldb) po _conversationDBRef
https://xxxxx-xxxxxx.firebaseio.com/Strike-Fighter/messages/4_5
(lldb) po [[_conversationDBRef queryOrderedByChild:@"time"] queryStartingAtValue:@(time)]
(/Strike-Fighter/messages/4_5 {
    i = time;
    sp = "548914514.2122542";
})

データ

回答 1 件
  • queryStartingAtValue を使用してクエリを実行しているため、1つの値のみを取得しています 。日付からチャットのすべてのメッセージを受信したい場合。 isGreaterThan を使用する必要があります 。

    したがって、特定の日付からメッセージを取得する場合は、次の操作を行う必要があります。

    ファイヤーストア

    [[[_conversationDBRef queryWhereField:@"time" isGreaterThan:@100000]
        queryOrderedByField:@"time"];
    
    

    Firebase Realtime Database

    [[[_conversationDBRef queryWhereField:@"time" queryStartingAtValue:@100000]
            queryOrderedByChild:@"time"];
    
    

    取得したいメッセージの数を制限することもできます(たとえば、遅延読み込みを統合するために) queryLimitedTo を追加します  クエリに。

    あなたのコードは大丈夫だと思います。 queryOrderedByValue を使用してみてください  https://firebase.google.com/docs/database/ios/lists-of-dataの公式ドキュメントをご覧ください

    とにかく、アプリケーションが起動している場合。データベースをFirebase Firestoreに更新することをお勧めします。 FirebaseチームはREaltimeよりも使いやすく、よりスケーラブルで見た目が重視されています。

    それがあなたを助けることを願っています!

あなたの答え