首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除Swift 3中核心数据实体中的所有数据

问删除Swift 3中核心数据实体中的所有数据
EN

Stack Overflow用户
提问于 2016-10-07 23:24:10
回答 3查看 33.6K关注 0票数 37

有没有办法批量删除存储在核心数据的所有实体中的所有数据?

我在某处读到,在iOS 9或10中,苹果引入了一种批量删除的方法,但我似乎找不到任何关于它的好信息。

最终,我只需要一个函数,它可以遍历一个实体,并删除其中的所有数据。它看起来应该足够简单,但它的文档/教程已经被证明非常难找到。

有什么想法吗?

编辑

我将以下代码添加到附加到按钮的IBAction中:

代码语言:javascript
复制
@IBAction func clearAllData(_ sender: AnyObject) {
    let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "PLProjects")
    let request = NSBatchDeleteRequest(fetchRequest: fetch)

    //get the data from core data
    getPLData()

    //reload the table view
    tableView.reloadData()
}

然而,这似乎不起作用。如果我关闭项目并重新打开它,数据仍然在那里。我假设这也是表视图不更新的原因,因为数据实际上并没有被删除。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-08 01:07:50

你会想到iOS 9中添加的NSBatchDeleteRequest。创建一个如下所示:

代码语言:javascript
复制
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee")
let request = NSBatchDeleteRequest(fetchRequest: fetch)

如果只想删除与谓词匹配的实例,也可以添加谓词。运行请求的步骤:

代码语言:javascript
复制
let result = try managedObjectContext.executeRequest(request)

请注意,批处理请求不会更新任何当前的应用程序状态。如果内存中有受删除影响的托管对象,则需要立即停止使用它们。

票数 62
EN

Stack Overflow用户

发布于 2017-03-31 06:09:45

为了充实Tom的回答,我添加了以下内容,以获得一个完整的例程:

代码语言:javascript
复制
func deleteAllRecords() {
    let delegate = UIApplication.shared.delegate as! AppDelegate
    let context = delegate.persistentContainer.viewContext

    let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "CurrentCourse")
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)

    do {
        try context.execute(deleteRequest)
        try context.save()
    } catch {
        print ("There was an error")
    }
}
票数 54
EN

Stack Overflow用户

发布于 2018-05-08 19:01:18

声明用于在CoreDataManager类中获取上下文的方法

代码语言:javascript
复制
     class func getContext() -> NSManagedObjectContext {
            guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
                return NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
            }
            if #available(iOS 10.0, *) {
                return appDelegate.persistentContainer.viewContext
            } else {
                return appDelegate.managedObjectContext
            }
        }

从您的NSManagedObject subClass调用上述方法:

代码语言:javascript
复制
    class func deleteAllRecords() {
            //getting context from your Core Data Manager Class
            let managedContext = CoreDataManager.getContext()
            let deleteFetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Your entity name")
            let deleteRequest = NSBatchDeleteRequest(fetchRequest: deleteFetch)
            do {
                try managedContext.execute(deleteRequest)
                try managedContext.save()
            } catch {
                print ("There is an error in deleting records")
            }
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39920792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档