4

我正在使用适用于 iOS 的 XMPPFramework。

我的问题是,当我加入一个房间,然后离开它,然后再次加入它时,我会收到来自该房间的消息,或该房间内的私人消息两次,如果我离开它并再次加入它,我会收到 3 次,依此类推.

有人告诉我,我可能会注册多个代表而不是删除它们,但如果我这样做,我就是不小心这样做了,我不确定这是在哪里发生的。任何人都可以帮助找到发生这种情况的地方吗?也许一个例子可以帮助我在我的代码中找到它。

谢谢。

4

2 回答 2

8

以防万一有人想知道。

离开房间的正确方法是做这组函数:

    [xmppRoom leaveRoom];
    [xmppRoom deactivate];
    [xmppRoom removeDelegate:self];
于 2012-01-20T11:40:01.353 回答
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];
    ......
 }
于 2012-10-30T09:29:53.570 回答