Ios 在XMPPMessageArchiving\u message\u CoreDataObject中存储重复消息(单一聊天)
我们正在使用XMPP framwork制作聊天应用程序。我们使用“XMPPMessageArchiving\u Message\u CoreDataObject”来显示和存储聊天数据。但有时会多次收到一条消息,而此重复消息存储在“XMPPMessageArchiving\u Message\u CoreDataObject”中。因此在显示时多次显示一条消息 安装流方法使用以下代码启用此模块:-Ios 在XMPPMessageArchiving\u message\u CoreDataObject中存储重复消息(单一聊天),ios,swift,xmpp,ejabberd,xmppframework,Ios,Swift,Xmpp,Ejabberd,Xmppframework,我们正在使用XMPP framwork制作聊天应用程序。我们使用“XMPPMessageArchiving\u Message\u CoreDataObject”来显示和存储聊天数据。但有时会多次收到一条消息,而此重复消息存储在“XMPPMessageArchiving\u Message\u CoreDataObject”中。因此在显示时多次显示一条消息 安装流方法使用以下代码启用此模块:- xmppMessageArchivingStorage = XMPPMessageArch
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]
let storage=XMPPMessageArchivingCoreDataStorage.sharedInstance()
让moc:NSManagedObjectContext?=
存储?.mainThreadManagedObjectContext let entityDescription=
NSEntityDescription.实体(名称:
“XMPPMessageArchiving\u Message\u CoreDataObject”,位于:moc??
NSManagedObjectContext())
let request=NSFetchRequest.init(entityName:
“XMPPMessageArchiving\u Message\u CoreDataObject”)
request.predicate=NSPredicate(格式:“bareJidStr=%@和
streamBareJidStr=%@“,
senderJID!,Constants.appDelegate.jabberID!)
request.entity=entityDescription
让消息=试试!moc?获取(请求)为![可任意散列]
在“消息”数组中,获取所有重复的消息字符串并显示重复的消息
如果有人有一个解决方案,删除重复的聊天信息,然后请帮助我
提前感谢,嘿,解决问题有两个步骤,但在此之前,了解您收到重复消息的原因非常重要。如果Xmpp向您发送重复的消息,那么。可能还有一些其他的配置问题,无论如何,让我们来为您当前的问题找到解决方案。 在fetch请求中添加第二行代码以检索消息
let request=NSFetchRequest.init(entityName:
“XMPPMessageArchiving\u Message\u CoreDataObject”)
request.returnsDistinctResults=true//添加此行
将消息插入数据库时,您需要确认该特定id的消息是否存在,要在XMPP中为消息添加id,您需要在向服务器发送消息时添加一些代码:
NSString *messageID = [XMPPStream generateUUID];
[self addAttributeWithName:@"id" stringValue:messageID];