2016-10-07 76 views
20

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

我在iOS 9或10的某处读到苹果介绍了一种批量删除的方法,但我似乎无法找到任何有用的信息。

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

有什么想法?

编辑

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

@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() 
} 

这似乎并不但是工作。如果我关闭该项目并重新打开它,数据仍然存在。我假设这也是为什么表视图不更新,因为数据实际上并未被删除。

回答

31

你在想的NSBatchDeleteRequest,这是iOS中加入9创建一个这样的:

let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee") 
let request = NSBatchDeleteRequest(fetchRequest: fetch) 

您还可以添加一个断言,如果你只是想删除匹配谓词实例。运行请求:

let result = try managedObjectContext.executeRequest(request) 

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

+0

我编辑我的职务,以表明我使用的代码 - 但似乎并没有为我工作。基本上我有一个UITableView加载到我的视图控制器中,并且我在一个名为“PLProjects”的实体中显示所有“项目”。我在屏幕上还有一个按钮实例,并且与它关联的IBAction。我评论中的更新显示了该IBAction中的代码 - 未能从Core Data Entity中删除项目,也未能更新表格。 –

+0

创建请求是不够的。你也必须执行它。请求不会自动运行,它们会在您告诉它们运行时运行。 –

+0

啊,对不起。我误解了你最初发布的内容。我认为代码的第二部分是添加一个谓词。所以 - 就这么说 - 在第二个片段中,什么是“moc”? –

19

为了充实汤姆的答复,这是我加有一个完整的程序:

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") 
    } 
} 
+0

不应该使用委托变量来声明上下文吗? – MrAn3

相关问题