【发布时间】:2014-12-28 03:58:04
【问题描述】:
我已经使用 XMPP 框架实现了一对一聊天它在一对一聊天中具有广泛的支持。消息归档和获取非常简单。但我知道,处理群聊消息的保存和显示非常困难。排序和谓词失败。显示重复的消息。
这是我在获取已保存的消息之前加入房间的方式)
XMPPRoomCoreDataStorage *coreDataRoomStorage=[self appDelegate].xmppRoomCoreDataStorage;
XMPPRoom *room=[[XMPPRoom alloc]initWithRoomStorage:coreDataRoomStorage jid:user.bareJid];
[room activate:[self appDelegate].xmppStream];
[room addDelegate:[self appDelegate] delegateQueue:dispatch_get_main_queue()];
[room joinRoomUsingNickname:user.user_name history:nil];
我明白了,有几个多余的消息保存。一条消息保存 3-4 次。我可能做错了什么。一些身体请帮忙!这是我为在房间中传递消息所做的代码
- (NSFetchedResultsController *)fetchedResultsController{
if (fetchedResultsController == nil)
{
NSManagedObjectContext *moc = [[self appDelegate] managedObjectContext_message];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
inManagedObjectContext:moc];
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"bareJidStr=%@",_thisRoom.roomJID.bare];
NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sd1, nil];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:20];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:moc
sectionNameKeyPath:nil
cacheName:nil];
[fetchedResultsController setDelegate:self];
NSError *error = nil;
if (![fetchedResultsController performFetch:&error])
{
DDLogError(@"Error performing fetch: %@", error);
}
}
return fetchedResultsController;}
【问题讨论】:
-
为什么投反对票?这个问题是真实的,这个问题的答案将帮助任何使用 robbie hanson xmpp 框架进行群聊的人。在此框架中存在重复 3-4 次相同消息的问题。如果有人找到任何解决方法,那将节省
-
别担心,哥们。开心点。现在你可以看到你的问题没有被否决。我对你的问题投了赞成票。只是因为我完全同意你的问题,这是真正的问题。
标签: ios xmpp ejabberd xmppframework multiuserchat