如何删除使用 xep-0136(消息存档)保存的聊天消息?

How to delete a chat message which was saved using xep-0136(Message Archiving)?

我想为用户提供使用 long-tap/select 操作一次删除一条或多条消息的功能。

我知道你想知道到目前为止我尝试了什么。但问题是我还没有找到任何关于删除消息的实现。

感谢任何形式的帮助!

您必须从 xmpp 核心数据库中删除邮件。 所以 xmpp 创建了 "XMPPMessageArchiving_Message_CoreDataObject" 命名的核心数据库 table 并使用它你可以删除消息。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject" inManagedObjectContext:myAppdelObject.Obj_xmppManager.moc];
[fetchRequest setEntity:entity];

NSError *error;
NSArray *items = [mocObject executeFetchRequest:fetchRequest error:&error];


for (NSManagedObject *managedObject in items) {
    [mocObject deleteObject:managedObject];
}

@Parthpatel1105 的回答是正确的,尽管正如@Bista 所说,它不会永久删除消息。

执行删除后,任何删除,如@Parthpatel1105 所做的完全删除,或单个消息,这将是相同的但没有 for 循环,您必须找到要删除的单个消息。您必须保存存储上下文。

也就是说,在做完之后:

for (NSManagedObject *managedObject in items) {
    [mocObject deleteObject:managedObject];
}

您必须添加调用才能保存,

在Swift(我用过的地方):

mocObject.save()

在 Objective-C 中,我认为应该是这样的:

[mocObject save:&error];