XMPPFramework - 获取重复的消息

时间:2012-01-16 09:43:49

标签: ios xmpp xmppframework

我正在使用iOS的XMPPFramework。

我的问题是,当我加入一个房间,然后离开它,然后再次加入我从那个房间收到消息,或者在那个房间内发送私信两次,如果我离开它并再次加入我接收了3次,等等。

我被告知我可能会注册多个代表并且不会删除它们,但是如果我这样做我会意外地进行,我不确定这是在哪里发生的。 任何人都可以帮助找到这种情况发生在哪里?也许一个例子可以帮助我在我的代码中找到它。

感谢。

2 个答案:

答案 0 :(得分:7)

以防有人想知道。

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

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

答案 1 :(得分: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];
    ......
 }