2016-12-09 2 views
1

Итак, у меня есть этот код, который отлично работает, но я хочу гораздо лучшего.Как удалить все объекты Entity в CoreData Swift 3

func deleteCoreDataObjects() { 
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 

    //where groupData is an Array of an Entity 
    for i in 0..<self.groupData.count { 
     context.delete(groupData[i]) 
    } 


    (UIApplication.shared.delegate as! AppDelegate).saveContext() 

} 

В настоящее время я удаляю объекты один за другим через цикл.

ответ

0

Вы можете попробовать это:

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

-1

Вот код для удаления записей из основных данных: // Удаление пользователя информация из местных разрядов

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 {} 
    } 
} 
0

Best удаляет хранилище сохраняемости, а затем добавляет новый вместо того, чтобы зацикливать каждый объект (если вы хотите удалить все объекты из 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{ 

    } 
}