2012-01-16 164 views
4

我正在使用適用於iOS的XMPPFramework。XMPPFramework - 獲取重複消息

我的問題是,當我加入一個房間,然後離開它,並再次加入我從那個房間收到消息,或在該房間內的私人消息兩次,如果我離開它,再次加入,我接收3次, 等等。

我被告知我可能註冊了多個代表而不是刪除它們,但如果我這樣做,我意外地做了這件事,我不確定這是怎麼回事。 任何人都可以幫助找到這種情況發生在哪裏?也許一個例子會幫我在我的代碼中找到它。

謝謝。

+0

我真的失去了這一個,任何幫助將不勝感激。 – subharb 2012-01-17 08:34:11

+0

嗨大衛,我正在開發一個應用程序,我需要羣聊功能,目前我可以做一對一的聊天。我正在使用XMPP類。但我也需要羣聊。我知道它會使用XMPPRoom類。但我無法鍛鍊代碼。請爲我提供一些示例代碼,以創建獨特的聊天室並加入一個房間。謝謝。 – Naveen 2012-01-25 07:21:28

+0

你可以發佈它作爲一個問題,並提供給我的鏈接?同時我會看看我的代碼。 – subharb 2012-01-26 08:46:34

回答

7

以防萬一有人喜歡知道。

正確的方式離開房間是做這套功能:

[xmppRoom leaveRoom]; 
    [xmppRoom deactivate]; 
    [xmppRoom removeDelegate:self]; 
0

我的事情有一個與remoteTimestamp值存在問題。我通過附加的解決方法解決問題的文件: 擴展/ XEP-0045/CoreDataStorage/XMPPRoomCoreDataStorage.m

前:

- (BOOL)existsMessage:(XMPPMessage *)message forRoom:(XMPPRoom *)room stream:(XMPPStream *)xmppStream 
{ 
    NSDate *remoteTimestamp = [message delayedDeliveryDate]; 

    if (remoteTimestamp == nil) 
    { 
    return NO; 
    } 

    NSManagedObjectContext *moc = [self managedObjectContext]; 
    ...... 
} 

後:

- (BOOL)existsMessage:(XMPPMessage *)message forRoom:(XMPPRoom *)room stream:(XMPPStream *)xmppStream 
{ 
    NSDate *remoteTimestamp = [message delayedDeliveryDate]; 

    if (remoteTimestamp == nil) 
    { 
      return NO; 
    } 

    remoteTimestamp = nil; 
    NSManagedObjectContext *moc = [self managedObjectContext]; 
    ...... 
}