我有一个打开的聊天 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/