Сохранить дублирующееся сообщение в XMPPMessageArchiving_Message_CoreDataObject (одиночный чат) - PullRequest
0 голосов
/ 27 апреля 2018

мы создаем приложение чата с использованием XMPP framwork.we использовали «XMPPMessageArchiving_Message_CoreDataObject» для отображения и хранения данных чата. Но иногда получаем одно сообщение несколько раз, и это повторное хранилище сообщений в «XMPPMessageArchiving_Message_CoreDataObject». Так что во время отображения отображается одно сообщение несколько раз.

Метод настройки потока активирует этот модуль, используя следующий код: -

xmppMessageArchivingStorage = 
     XMPPMessageArchivingCoreDataStorage.sharedInstance() 
xmppMessageArchivingModule = 
     XMPPMessageArchiving(messageArchivingStorage : 
      xmppMessageArchivingStorage!) 
xmppMessageArchivingModule?.clientSideMessageArchivingOnly = true 
xmppMessageArchivingModule?.activate(xmppStream!) 
xmppMessageArchivingModule!.addDelegate(self, delegateQueue: 
   DispatchQueue.main)

Получить данные из БД: -

let storage = XMPPMessageArchivingCoreDataStorage.sharedInstance() 
let moc: NSManagedObjectContext? = 
   storage?.mainThreadManagedObjectContext let entityDescription = 
   NSEntityDescription.entity(forEntityName: 
   "XMPPMessageArchiving_Message_CoreDataObject", in: moc ?? 
   NSManagedObjectContext()) 
let request = NSFetchRequest<NSFetchRequestResult>.init(entityName: 
    "XMPPMessageArchiving_Message_CoreDataObject") 
request.predicate = NSPredicate(format: "bareJidStr = %@ AND 
   streamBareJidStr = %@", 
   senderJID!,Constants.appDelegate.jabberID!) 
request.entity = entityDescription 
let messages = try! moc?.fetch(request) as! [AnyHashable]

в массиве "messages" получает всю дублирующую строку сообщения и отображает дублирующееся сообщение.

если у кого-то есть решение для удаления дубликата сообщения в чате, пожалуйста, помогите мне.

Спасибо заранее,

1 Ответ

0 голосов
/ 10 июня 2018

Эй, есть два шага, чтобы решить проблему, но перед этим очень важно понять, почему вы получаете повторяющееся сообщение. Если Xmpp отправит вам дубликат сообщения, тогда. Там может быть какая-то другая проблема конфигурации, в любом случае, давайте найдем решение вашей текущей проблемы. Добавьте вторую строку кода в ваш запрос на получение сообщений

let request = NSFetchRequest<NSFetchRequestResult>.init(entityName: "XMPPMessageArchiving_Message_CoreDataObject") request.returnsDistinctResults = true //Add this line

При вставке сообщений в БД необходимо подтвердить, существует ли сообщение для этого конкретного идентификатора, чтобы добавить идентификатор для сообщения в XMPP, необходимо добавить некоторый код при отправке сообщения на сервер:

    NSString *messageID = [XMPPStream  generateUUID];
[self addAttributeWithName:@"id" stringValue:messageID];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...