在 Swift 2 中删除实体的核心数据

Posted

技术标签:

【中文标题】在 Swift 2 中删除实体的核心数据【英文标题】:Delete Core Data for Entity in Swift 2 【发布时间】:2016-04-24 21:52:05 【问题描述】:

如何在 Swift 中删除实体的 Core Data 中的所有条目?

我想要一个deleteAll()方法,这样我就可以清空数据库了。

这是我目前所拥有的:

func deleteAllCoreData() 
    let fetchRequest = NSFetchRequest(entityName: "DataPoint")
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

    do 
        try coordinator.executeRequest(deleteRequest, withContext: managedContext)
     catch let error as NSError 
        print("Could not fetch \(error), \(error.userInfo)")
    


但它有一个错误:

未知的命令类型(实体:DataPoint;谓词: ((空值));排序描述符:((空));类型: NSManagedObjectIDResultType; ) >

【问题讨论】:

【参考方案1】:

ios 9 添加了一个名为 NSBatchDeleteRequest 的新类,它允许您轻松删除与谓词匹配的对象,而无需将它们全部加载到内存中。以下是您的使用方法:

let fetchRequest = NSFetchRequest(entityName: "Foo")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

do 
    //`myPersistentStoreCoordinator` is from the core data stack
    try myPersistentStoreCoordinator.executeRequest(deleteRequest, withContext: myContext)
 catch let error as NSError 
    // TODO: handle the error

【讨论】:

更新了我的问题,仍然有一些错误。但我想我已经接近了。 看看这个教程,learncoredata.com/nsbatchdeleterequest-in-ios-9,也许你会觉得有用。 我的应用适用于 OS X。我不确定 NSBatchDeleteRequest 是否适用于 OS X。 它似乎也适用于 OS X。仔细查看NSBatchDeleteRequest 头文件(ObjC),你会看到下一个类宏——NS_CLASS_AVAILABLE(10_11,9_0)

以上是关于在 Swift 2 中删除实体的核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Swift 的核心数据中删除特定的实体数据?

SWIFT 的核心数据:如何从关系实体中删除对象?

从核心数据中的实体中删除记录

保存到多个实体中 - 核心数据 - Swift

我可以通过编码在核心数据中创建和删除实体吗

删除核心数据对象时,如何在 Swift 5 中同时删除其所有相关对象?