如何在CoreData Swift 3中删除所有实体对象。
如何在CoreData Swift 3中删除所有实体对象。
我有一个可以正常工作的代码,但我想要一个更好的版本。
func deleteCoreDataObjects() {
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
// groupData 是一个实体对象的数组
for i in 0.. context.delete(groupData[i]) } (UIApplication.shared.delegate as! AppDelegate).saveContext() } 目前,我通过for循环逐个删除对象。
问题的原因是想要删除CoreData中的所有实体对象。解决方法是删除持久存储然后添加一个新的,而不是循环遍历每个实体。
func deletePersistentStoreCoordinator() {
do {
let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("YourDatabaseName.sqlite")
try self.persistentStoreCoordinator.destroyPersistentStoreAtURL(url, withType: NSSQLiteStoreType, options: nil)
try self.persistentStoreCoordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil)
}
catch{
}
}
将持久存储删除后,再使用相同的URL添加新的持久存储。这样可以清空CoreData中的所有实体对象。
文章标题:如何在CoreData中删除所有实体对象(Swift 3)
最近在使用CoreData的过程中,遇到了一个问题:如何删除所有的实体对象。经过一番搜索和尝试,我找到了一个解决方法。
以下是解决方法的代码:
func deleteAllData(entity: String)
{
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedContext = appDelegate.managedObjectContext
let fetchRequest = NSFetchRequest(entityName: entity)
fetchRequest.returnsObjectsAsFaults = false
do
{
let results = try managedContext.executeFetchRequest(fetchRequest)
for managedObject in results
{
let managedObjectData:NSManagedObject = managedObject as! NSManagedObject
managedContext.deleteObject(managedObjectData)
}
} catch let error as NSError {
print("Detele all data in \(entity) error : \(error) \(error.userInfo)")
}
}
使用方法如下:
self.deleteAllData("your_entityName")
以上方法来源于:https://stackoverflow.com/a/33931528/2894160
希望这个解决方法能对你有所帮助!
在使用CoreData时,有时候需要删除所有的实体对象。下面是一段用于删除CoreData记录的代码。在这段代码中,首先创建了一个NSFetchRequest对象,用于获取指定实体的所有对象。然后,通过NSBatchDeleteRequest对象来进行批量删除。如果使用的是iOS 9或更高版本的系统,就可以直接使用NSBatchDeleteRequest来删除所有的对象。如果使用的是早期版本的系统,则需要使用NSFetchRequest来获取所有对象,在循环中逐个删除。
解决方法:
1. 创建NSFetchRequest对象,设置entityName为需要删除的实体名称。
2. 判断系统版本,如果是iOS 9或更高版本,使用NSBatchDeleteRequest进行批量删除。如果是早期版本,使用NSFetchRequest获取所有对象,在循环中逐个删除。
3. 使用managedObjectContext的save()方法保存更改。
以下是代码实现:
//Delete user info from local db
func deleteUserInfo() {
let context = appdelegate.managedObjectContext
let coord = appdelegate.persistentStoreCoordinator
let fetchRequest = NSFetchRequest(entityName: "User")
if #available(iOS 9.0, *) {
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try coord.executeRequest(deleteRequest, withContext: context)
}
catch let error as NSError {
//Error handling
}
catch {}
} else {
// Fallback on earlier versions
do {
let users: NSArray = try appdelegate.managedObjectContext.executeFetchRequest(fetchRequest)
for user in users {
appdelegate.managedObjectContext.delete(user)
}
try appdelegate.managedObjectContext.save()
} catch let error as NSError {
//Error handling
}
catch {}
}
}