有没有办法批量删除存储在核心数据的所有实体中的所有数据?
我在某处读到,在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()
}然而,这似乎不起作用。如果我关闭项目并重新打开它,数据仍然在那里。我假设这也是表视图不更新的原因,因为数据实际上并没有被删除。
发布于 2016-10-08 01:07:50
你会想到iOS 9中添加的NSBatchDeleteRequest。创建一个如下所示:
let fetch = NSFetchRequest<NSFetchRequestResult>(entityName: "Employee")
let request = NSBatchDeleteRequest(fetchRequest: fetch)如果只想删除与谓词匹配的实例,也可以添加谓词。运行请求的步骤:
let result = try managedObjectContext.executeRequest(request)请注意,批处理请求不会更新任何当前的应用程序状态。如果内存中有受删除影响的托管对象,则需要立即停止使用它们。
发布于 2017-03-31 06:09:45
为了充实Tom的回答,我添加了以下内容,以获得一个完整的例程:
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")
}
}发布于 2018-05-08 19:01:18
声明用于在CoreDataManager类中获取上下文的方法
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调用上述方法:
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")
}
}https://stackoverflow.com/questions/39920792
复制相似问题