从 CoreData 中删除特定条目

Posted

技术标签:

【中文标题】从 CoreData 中删除特定条目【英文标题】:Removing specific entry from CoreData 【发布时间】:2015-07-05 19:33:52 【问题描述】:

我在核心数据中存储一个新条目,如下所示:

    let context = self.fetchedResultsController.managedObjectContext
    let entity = self.fetchedResultsController.fetchRequest.entity!
    let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(entity.name!, inManagedObjectContext: context) as! NSManagedObject
    newManagedObject.setValue("Test1", forKey: "name")

    // Save the context.
    var error: NSError? = nil
    if !context.save(&error) 
        abort()
    

我的问题是如何在没有 UITableViewCell 的 indexPath 的情况下删除条目(例如 Test1)?

更新:

fetchRequest:

    let context = self.fetchedResultsController.managedObjectContext
    let fetchRequest = NSFetchRequest(entityName:"Person")
    fetchRequest.predicate = NSPredicate(format: "name = %@", name)
    var error : NSError?
    let results = managedObjectContext!.executeFetchRequest(fetchRequest, error:&error)

【问题讨论】:

【参考方案1】:

在您的情况下,您可以通过以下方式删除对象:

context.deleteObject(newManagedObject)

如果您需要从代码中没有对托管对象本身的引用的某个位置删除对象,您可以获取它,例如基于在其名称属性上,然后将其删除。

这样你就可以获得所有名字与name匹配的MO:

let fetchRequest = NSFetchRequest(entity: entityName)
fetchRequest.predicate = NSPredicate(format: "name == %@", name)
let results = context.executeFetchRequest(fetchRequest, error: &error)

【讨论】:

非常感谢您的回答!我需要从代码中的某个位置删除对象(没有参考)。你能给我一个例子,如何根据它的 name 属性来获取它吗? 我更新了我的问题,它是如何工作的。我有 MOs Test1Test2Test3。如何删除Test2?这是正确的方法:fetchRequest.predicate = NSPredicate(format: "name == Test2", name)?我使用 Swift 大约 1 个月。抱歉这个愚蠢的问题。 fetchRequest.predicate = NSPredicate(format: "name == Test2")fetchRequest.predicate = NSPredicate(format: "name == %@", name) 然后删除它:context.deleteObject(results) 对吗? 那是一个数组,所以你应该遍历它并一个一个地删除对象。如果您确定只有一个具有给定名称的对象,您可以这样做:context.deleteObject(results.firstObject)

以上是关于从 CoreData 中删除特定条目的主要内容,如果未能解决你的问题,请参考以下文章

从包含 R 中特定字符的字符串向量中删除条目 [重复]

CoreData 删除单个对象

Restkit 删除 coredata 中特定对象的所有对象

如何使用 Swift 删除 coredata 中的特定记录?

停止删除特定的 CoreData 记录?

将 CoreData 与对象一起使用?