如何在CoreData Swift 3中删除所有实体对象。

4 浏览
0 Comments

如何在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循环逐个删除对象。

0
0 Comments

问题的原因是想要删除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中的所有实体对象。

0
0 Comments

文章标题:如何在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

希望这个解决方法能对你有所帮助!

0
0 Comments

在使用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 {}

}

}

0