在执行查询时,如何检测处理完所有找到的节点的时间?在以下示例中,我对每个遇到的节点进行一些处理。当我到达列表的“结尾”时,我希望能够检测到这一点,所以我知道它已经完成了。
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条消息。
答案 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 );
}
}];