【问题标题】:XMPPFramework - Getting repeated messagesXMPPFramework - 获取重复的消息
【发布时间】:2012-02-11 06:47:10
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 我真的迷失了这个,任何帮助将不胜感激。
  • 嗨,David,我正在开发一个需要群聊功能的应用程序,目前我可以进行一对一聊天。我正在使用 XMPP 类。但我也需要群聊。我知道它将使用 XMPPRoom 类。但我无法锻炼代码。请提供一些示例代码来创建一个独特的聊天室并加入一个房间。谢谢。
  • 您可以将其作为问题发布并提供链接吗?同时我会看看我的代码。
  • 大卫这里是我的问题的链接stackoverflow.com/questions/9032279/…

标签: ios xmpp xmppframework


【解决方案1】:

以防万一有人想知道。

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

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

【讨论】:

    【解决方案2】:

    我觉得 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];
        ......
     }
    

    【讨论】:

      猜你喜欢
      • 2016-05-23
      • 2012-06-21
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2012-02-08
      • 2018-05-10
      • 2012-12-19
      相关资源
      最近更新 更多