Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在XMPPMessageArchiving\u message\u CoreDataObject中存储重复消息(单一聊天)_Ios_Swift_Xmpp_Ejabberd_Xmppframework - Fatal编程技术网

Ios 在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

我们正在使用XMPP framwork制作聊天应用程序。我们使用“XMPPMessageArchiving\u Message\u CoreDataObject”来显示和存储聊天数据。但有时会多次收到一条消息,而此重复消息存储在“XMPPMessageArchiving\u Message\u 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]
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];