Also ich habe diesen Code, der gut funktioniert, aber ich möchte einen viel besseren.So löschen Sie alle Entity-Objekte in CoreData Swift 3
Zur Zeit lösche ich die Objekte einzeln für for-Schleife.
Also ich habe diesen Code, der gut funktioniert, aber ich möchte einen viel besseren.So löschen Sie alle Entity-Objekte in CoreData Swift 3
Zur Zeit lösche ich die Objekte einzeln für for-Schleife.
Sie können dies versuchen:
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)")
}
}
Verbrauch:
self.deleteAllData("your_entityName")
Schon gesehen: https://stackoverflow.com/a/33931528/2894160
Hier ist der Code für Datensätze von Core Data zu löschen: // Benutzer löschen info von lokalem 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)
//let predicate = NSPredicate(format: "id == %@", key)
//fetchRequest.predicate = predicate
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 {}
}
}
Am besten löschen Sie den Persistenzspeicher und fügen dann einen neuen hinzu, anstatt jede Entität zu durchlaufen (wenn Sie alle Entitäten von coredata löschen möchten).
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{
}
}