XMPPFramework - 收到消息时调用两次“didReceiveMessage”

Posted

技术标签:

【中文标题】XMPPFramework - 收到消息时调用两次“didReceiveMessage”【英文标题】:XMPPFramework - 'didReceiveMessage' called two times when message is received 【发布时间】:2014-07-05 10:02:29 【问题描述】:

每当我收到任何新消息时,这两个方法都会被调用两次。

- (BOOL)xmppStream:(XMPPStream *)sender didReceiveIQ:(XMPPIQ *)iq

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message

我正在向服务器发送请求以使用以下代码获取我的花名册。

NSXMLElement *query = [NSXMLElement elementWithName:@"query" xmlns:@"jabber:iq:roster"];
XMPPIQ *iq = [XMPPIQ iq];
[iq addAttributeWithName:@"id" stringValue:@"buddyRequest"];
[iq addAttributeWithName:@"to" stringValue:@"54.186.107.171"];
[iq addAttributeWithName:@"type" stringValue:@"get"];
[iq addChild:query];
[self.xmppStream sendElement:iq];

谁能指出问题出在哪里?

谢谢。

【问题讨论】:

第一个代码块你只调用一次吗?当您的委托方法被调用时,对象是否相同(尤其是指针)? 感谢您的重播。是的。我只有一次。好吧,当我从 spark 向我的应用程序发送消息时,DidReciveMessage 被调用了 2 次。所以我的表格视图在我的应用程序中显示了两条相同的消息。 你设置XMPPStream的代理多少次了? [xmppStream addDelegate:self delegateQueue:dispatch_get_main_queue()];这行我打了两次。 谢谢。我的问题已经解决了。实际上,对于第二行,我输入了 XMPPStream insted of xmpproster。非常感谢 【参考方案1】:

我认为你将委托设置为 XMPPStream 两次。删除一个并检查。然后你也得到两个响应,检查 xmppstream 对象值。两者是不同的,你肯定设置了两次。

【讨论】:

以上是关于XMPPFramework - 收到消息时调用两次“didReceiveMessage”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到自己发来的消息,却收不到别人发来的消息。 XMPPFramework iOS

在 XMPPFramework 中发送消息

如何使用 XMPPFramework 从 ejabberd 中删除两个用户之间的特定消息?

为什么不能用两次握手进行连接?

XMPPFramework - 消息未发送

将传入消息附加到 ChatViewController 集合视图(XMPPFramework+JSQMessagesViewController)