XMPPFramework - 如何处理重复接收的消息

4
我正在使用iOS的XMPPFramework。
我的问题是,当我加入一个房间,然后离开它,再次加入时,我会收到来自该房间或该房间内的私人消息两次。如果我离开并再次加入,则会接收三次,依此类推。
有人告诉我可能注册了多个委托并没有删除它们,但如果我这样做了,那只是意外,并且我不确定它发生在哪里。能否帮助我找到发生的地方?也许一个示例可以帮助我在我的代码中找到它。
谢谢。

我真的对这个问题感到迷茫,任何帮助都将不胜感激。 - subharb
嗨,David,我正在开发一个应用程序,其中需要群聊功能,目前我能够进行一对一的聊天。我正在使用XMPP类。但我也需要群聊。我知道它将使用XMPPRoom类。但我无法编写代码。请为我提供创建唯一聊天室和加入房间的示例代码。谢谢。 - Naveen
你能把它发表为一个问题并给我提供链接吗?与此同时,我会看一下我的代码。 - subharb
David,这是我的问题链接: https://dev59.com/Il_Va4cB1Zd3GeqPWcHr - Naveen
2个回答

8

万一有人想知道。

离开房间的正确方式是执行以下功能:

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

0

我认为 remoteTimestamp 值存在问题。我通过在文件 Extensions/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];
    ......
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接