2013-08-20 1 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 сообщений в фоновом режиме. После того, как сообщения были загружены, я хотел бы обновить интерфейс. Однако я не уверен, как я знаю, что все сообщения были загружены, поскольку в списке может быть менее 100 сообщений.

ответ

1

Я выяснил, как читать все сообщения спереди, используя метод observSingleEventOfType, а затем итерацию над детьми.

[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); 
    } 
}]; 
Смежные вопросы