【问题标题】:How to delete a chat message which was saved using xep-0136(Message Archiving)?如何删除使用 xep-0136(消息存档)保存的聊天消息?
【发布时间】:2015-08-09 06:46:09
【问题描述】:

我想为用户提供使用长按/选择操作一次删除一条或多条消息的功能。

我知道你想知道我到目前为止所做的尝试。但问题是我还没有找到任何关于删除要实施的消息。

感谢任何形式的帮助!

【问题讨论】:

    标签: ios objective-c xmppframework


    【解决方案1】:

    您必须从 xmpp 核心数据库中删除消息。 所以 xmpp 创建了名为“XMPPMessageArchiving_Message_CoreDataObject”的核心数据库表,使用它可以删除消息。

    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];
    }
    

    【讨论】:

    • 一定会尝试并回复您。
    • 这让我完成了一半,我现在可以删除消息,但是每次我重新登录(进入应用程序)时,删除的消息都会再次出现。如何永久删除邮件?
    • 先生,我想重新加载 TableView。我尝试了很多但没有效果。这是“IMMainMessageC”类,其中“initWithStyle”是用于在新消息时重新加载的函数。当从 Tableview 删除任何消息时,我不知道如何在 XMPP 中重新加载 TableView。感谢您的提前。
    • 您必须从数据库中获取数组中的消息。从数据库中删除消息后,您必须从数据库中获取数组中剩余的消息并重新加载 UITableview。
    • 如何使用 xmpp 框架从 openFire 获取消息??
    【解决方案2】:

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

    执行删除后,任何删除,无论是像@Parthpatel1105 那样完全删除,还是一条消息,这将是相同的,但没有 for 循环,您必须找到要删除的单条消息。您必须保存存储上下文。

    这意味着,在做之后:

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

    你必须添加一个调用来保存,

    在 Swift 中(我用过它的地方):

    mocObject.save()
    

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

    [mocObject save:&error];
    

    【讨论】:

      猜你喜欢
      • 2012-08-16
      • 2013-02-09
      • 2016-02-25
      • 1970-01-01
      • 2018-05-18
      • 2015-10-27
      • 1970-01-01
      • 2017-02-12
      • 2017-02-24
      相关资源
      最近更新 更多