2013-08-20 29 views
1

如何檢測何時在查詢時處理完所有找到的節點?在下面的例子中,我對每個遇到的節點做了一些處理。當我到達列表的「結尾」時,我希望能夠檢測到這一點,以便我知道它已完成。Firebase FQuery如何在節點列表末尾檢測到什麼時候

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

我想通過使用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); 
    } 
}];