2014-01-08 202 views
2

我有這個Firebase引用來通過傳遞上次讀取消息的優先級來檢索所有未決(未讀)消息。我在聊天室裏這樣做。Firebase回調不會觸發

NSNumber* lastPriority = [self getLastPriority]; 
__block FirebaseHandle handle = [[msgListRef queryStartingAtPriority:lastPriority] observeEventType:FEventTypeValue withBlock:^(FDataSnapshot *snapshot) { 

    // here I will get all the pending messages and add them to my local message list and reload the UITableView 
    [self addMessageToList: snapshot] 
    [msgListRef removeObserverWithHandle:handle]; 
    // Then I call the below function to keep listening for new messages when the chat is in progress 
    [self addMessageListener]; 

}]; 



- (void) addMessageListener{ 
     msgListRef = [[Firebase alloc] initWithUrl:messageListUrl]; 
     NSNumber* lastPriority = [self getLastPriority]; 
     [[msgListRef queryStartingAtPriority:lastPriority] observeEventType:FEventTypeChildAdded withBlock:^(FDataSnapshot *snapshot) { 

      [self addMessageObject:snapshot.value]; 
      // Here I will reload the table view. This one is supposed to fire for each  
      //message since I used FEventTypeChildAdded. 
      //*** BUT THIS CALLBACK IS NEVER FIRED *** 

     }]; 
} 

任何想法,爲什麼與FEventTypeChildAdded observerType第二回調時,我之前已經叫FEventTypeValue永遠不會被解僱?如果我沒有使用FEventTypeValue讀取全部內容,它將起作用。但在這種情況下,當用戶進入聊天室時,我的UITableView重新加載將會針對每個待處理消息進行調用。

+0

你不應該使用lastPriority,而不是lastMessage.priority?另外,優先級的價值是什麼?有多少條消息具有該優先級? – Kato

+0

這是一個錯誤的問題。我會編輯它。優先級是一個運行號碼,每次有新消息進來時我都會增加。它也存儲在火力點地點。 – travoux

+0

我也仔細檢查你傳遞給子事件處理程序的優先級與值事件處理程序是否相同。 addMessageToList以某種方式修改最後的優先級? – Anant

回答

2

對不起,guys.The問題是與我的代碼。 firebase引用(msgListRef)在我沒有注意到的另一個函數中被重新初始化。