1

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

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 条,我不确定如何知道所有消息都已加载。

4

1 回答 1

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 );
    }
}];
于 2013-08-20T16:24:18.203 回答