ios - 如何从 XMPP 消息存储中删除聊天记录?

标签 ios objective-c swift xmpp xmppframework

我有一个打开的聊天 Controller ,我想从我的设备中删除它们。

我试试这段代码:

let moc = OneMessage.sharedInstance.xmppMessageStorage?.mainThreadManagedObjectContext
    let entityDescription = NSEntityDescription.entityForName("XMPPMessageArchiving_Message_CoreDataObject", inManagedObjectContext: moc!)
    let request = NSFetchRequest()
    let predicateFormat = "bareJidStr like %@ "

    let predicate = NSPredicate(format: predicateFormat, user.jidStr)
    request.predicate = predicate
    request.entity = entityDescription

    do {
        let results = try moc?.executeFetchRequest(request)
        print("Results: \(results)")
        for message in results! {
            print("Message is: \(message)")
            moc?.deleteObject(message as! NSManagedObject)
        }
    } catch _ {
    }

但是 当我删除它们时,我在日志中看到它们已被删除,但是当我重新启动我的应用程序时,它们又会出现。因此,它会暂时删除它们,直到应用重新启动。

这里有什么问题?谁能帮我解决这个错误?

有问题可以在评论里问我

最佳答案

您有一个单独的 XMPPMessageArchiving 实体的 NSManagedObjectContext 用于您将要对数据库执行的更改。

您的代码没有任何问题,这是因为您正在删除对象但未执行保存操作、发送保存并执行整个 mergeChangesFromContextDidSaveNotification。

在你的情况下应该是:

swift :

do {
    let results = try moc?.executeFetchRequest(request)
    print("Results: \(results)")
    for message in results! {
        print("Message is: \(message)")
        moc?.deleteObject(message as! NSManagedObject)
    }

    moc.save(nil) /** This line will update the main database **/

} catch _ {
}

Objective-C :

NSError *error;
NSArray *fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error];

for (NSManagedObject *object in fetchedObjects) {
    [moc deleteObject:object];
}

if (![moc save:&error]) {
    NSLog(@"Error in deleting conversation thread %@", error);
}

关于ios - 如何从 XMPP 消息存储中删除聊天记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33873159/

相关文章:

iphone - 带有背景图像的 UINavigationController 在 View Controller 被推送或弹出时保持静止并且不动画

objective-c - 如何阻止 UIScrollView 吞咽触摸

ios - 如果我创建一个新窗口并 makeKeyAndVisible,前一个窗口会发生什么

iphone - 如何在我的 iOS 应用程序中保存登录数据

ios - Alamofire 的自定义、基于内容的验证器(在 Swift 中)

objective-c - 在初始化时返回其他对象

ios - 从 mapView 获取视口(viewport)坐标? regionDidChanged swift

ios - UIView center 属性给出了意想不到的结果

ios - 默认情况下,Xcode 是否强制使用 MVC 设计模式?

ios - TwitterKit 解析错误。预期 ')' 和预期类型