CoreData删除多个对象

我知道如何删除CoreData中的单个对象我只是想知道是否有更简单的删除多个对象的方法?

对于单删除,您可以使用

[moc deleteObject:someManagedObject]; 

但是没有多个对象的等价物。

目前我正在考虑做…

 NSArray *arrayOfManagedObjectsToDelete = //... for (SomeManagedObjectClass *managedObject in arrayOfManagedObjectsToDelete) { [moc deleteObject:managedObject]; } 

但我不确定是否有另一种方法可以做到这一点?

理想情况下,像…的方法

 - (void)deleteObjects:(NSSet*)objects 

NSManagedObjectContext或一些类似的方法。

iOS10Swift 3

  let fetchRequest = NSFetchRequest(entityName: "EntityName") let deleteRequest = NSBatchDeleteRequest( fetchRequest: fetchRequest) do{ try mContext.execute(deleteRequest) }catch let error as NSError {//handle error here } 

这将删除EntityName所有对象,但您可以使用NSPredicate应用其他过滤

iOS 9

迅速

 let fetchRequest = NSFetchRequest(entityName: "EntityName") let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest) do { try myPersistentStoreCoordinator.executeRequest(deleteRequest, withContext: myContext) } catch let error as NSError { // TODO: handle the error } 

Objective-C的

 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"EntityName"]; NSBatchDeleteRequest *deleteRq = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request]; NSError *deleteError = nil; [myPersistentStoreCoordinator executeRequest:deleteRq withContext:myContext error:&deleteError]; 

iOS 8及更早版本

 NSFetchRequest *fr = [[NSFetchRequest alloc] init]; [fr setEntity:[NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:myContext]]; [fr setIncludesPropertyValues:NO]; //only fetch the managedObjectID NSError *error = nil; NSArray *objects = [myContext executeFetchRequest:fr error:&error]; //error handling goes here for (NSManagedObject *object in objects) { [myContext deleteObject:object]; } NSError *saveError = nil; [myContext save:&saveError]; //more error handling here 

据我所知,没有一种方法……你应该像你已经做的那样做。 有一个名为deletedObjects的方法,但它只返回在下一个保存操作期间将从其持久存储中删除的对象集,如类引用中所述。

不,没有特定方法可以删除多个对象atm。 但我会做这样的事情,与你已经在做的事情相似:

 - (void)removeFromManagedObjectContext {  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; fetchRequest.entity = [NSEntityDescription entityForName:@"YourEntity" inManagedObjectContext:managedObjectContext]; NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:nil]; for (Your Entity *Entity in results) { [managedObjectContext deleteObject:Entity]; } }