4

iOS 用の XMPPFramework を使用しています。

私の問題は、ルームに参加してから退出し、再度参加すると、そのルームからのメッセージ、またはそのルーム内のプライベート メッセージが 2 回受信され、退室して再度参加すると、その後 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 に答える