Firebase FQuery如何检测节点列表末尾的时间

时间:2013-08-20 03:58:58

标签: firebase

在执行查询时,如何检测处理完所有找到的节点的时间?在以下示例中,我对每个遇到的节点进行一些处理。当我到达列表的“结尾”时,我希望能够检测到这一点,所以我知道它已经完成了。

FQuery* messageListQuery = [m_firebaseRef queryLimitedToNumberOfChildren:100];
[messageListQuery observeEventType:FEventTypeChildAdded andPreviousSiblingNameWithBlock:^(FDataSnapshot *snapshot, NSString *prevNodeName) {
    // 1. Do interesting stuff with the snapshot data
    // 2. I want to detect when I'm at the end of the list so I know when I'm done processing the list.
}];

以下是示例用例。我想在后台加载最新的100条消息。加载消息后,我想更新UI。但是,我不知道我是如何知道所有消息都已加载的,因为列表中可能有不到100条消息。

1 个答案:

答案 0 :(得分:1)

我想出了如何使用observeSingleEventOfType预先阅读所有消息,然后迭代孩子们。

[m_firebaseRef observeSingleEventOfType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) {
    NSLog( @"Name %@ with %d children.", snapshot.name, snapshot.childrenCount );

    for( FDataSnapshot *child in snapshot.children )
    {
        NSDictionary *msgData = child.value;

        NSString *message      = msgData[kFirebaseLiveChatFieldMessage];
        NSString *gamerTag     = msgData[kFirebaseLiveChatFieldGamerTag];
        NSString *gameCenterId = msgData[kFirebaseLiveChatFieldGameCenterId];
        NSLog( @"Preload = %@ (%@): %@", gamerTag, gameCenterId, message );
    }
}];