Я реализовал индивидуальный чат с использованием инфраструктуры XMPP. Он имеет обширную поддержку в чате один к одному. Архивирование и выборка сообщений просты. Но я вижу, очень трудно справиться с сохранением и отображением сообщений в групповом чате. Сортировка и предикаты не работают. отображаются повторяющиеся сообщения.Как обрабатывать чат-сообщения MUC - дублирование сообщений
Это, как я присоединиться к комнате, прежде чем я принести мое уже сохраненное сообщение)
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 раза. Что я могу сделать неправильно. Помощь некоторых органов тела! Это код, я сделать для fecthing сообщений в комнате
- (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 framework. В этих рамках есть проблема с теми же сообщениями, что и в 3-4 раза. если кто-то найдет какую-нибудь работу, это сэкономит –
Не беспокойтесь, приятель. Счастливый. Теперь вы можете видеть свой вопрос без проголосовавшего. Я проголосовал за ваш вопрос.Просто потому, что я полностью согласен с тобой в вопросе Его подлинного вопроса. –