我正在使用适用于 iOS 的 XMPPFramework。
我的问题是,当我加入一个房间,然后离开它,然后再次加入它时,我会收到来自该房间的消息,或该房间内的私人消息两次,如果我离开它并再次加入它,我会收到 3 次,依此类推.
有人告诉我,我可能会注册多个代表而不是删除它们,但如果我这样做,我就是不小心这样做了,我不确定这是在哪里发生的。任何人都可以帮助找到发生这种情况的地方吗?也许一个例子可以帮助我在我的代码中找到它。
谢谢。
我正在使用适用于 iOS 的 XMPPFramework。
我的问题是,当我加入一个房间,然后离开它,然后再次加入它时,我会收到来自该房间的消息,或该房间内的私人消息两次,如果我离开它并再次加入它,我会收到 3 次,依此类推.
有人告诉我,我可能会注册多个代表而不是删除它们,但如果我这样做,我就是不小心这样做了,我不确定这是在哪里发生的。任何人都可以帮助找到发生这种情况的地方吗?也许一个例子可以帮助我在我的代码中找到它。
谢谢。
以防万一有人想知道。
离开房间的正确方法是做这组函数:
[xmppRoom leaveRoom];
[xmppRoom deactivate];
[xmppRoom removeDelegate:self];
我觉得 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];
......
}