CoreData删除多个对象

Fog*_*ter 15 core-data objective-c ios

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

对于单删除,您可以使用

[moc deleteObject:someManagedObject];
Run Code Online (Sandbox Code Playgroud)

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

目前我正在考虑做...

NSArray *arrayOfManagedObjectsToDelete = //...

for (SomeManagedObjectClass *managedObject in arrayOfManagedObjectsToDelete) {
    [moc deleteObject:managedObject];
}
Run Code Online (Sandbox Code Playgroud)

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

理想情况下像...的方法

- (void)deleteObjects:(NSSet*)objects
Run Code Online (Sandbox Code Playgroud)

NSManagedObjectContext或一些类似的方法.

ZaE*_*FaR 22

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 
}
Run Code Online (Sandbox Code Playgroud)

Objective-C的

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"EntityName"];
NSBatchDeleteRequest *deleteRq = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];

NSError *deleteError = nil;
[myPersistentStoreCoordinator executeRequest:deleteRq withContext:myContext error:&deleteError];
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 请注意, NSBatchDeleteRequest 不会触发通知,您还应该在它之后使上下文无效,因为它直接更改了存储... (2认同)

Cai*_*uza 7

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


Chr*_*sov 7

iOS10Swift 3

    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "EntityName")
    let deleteRequest = NSBatchDeleteRequest( fetchRequest: fetchRequest)

    do{
        try mContext.execute(deleteRequest)
    }catch let error as NSError {//handle error here }
Run Code Online (Sandbox Code Playgroud)

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


7c9*_*fdf 5

不,没有具体方法可以删除多个对象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];
    }
}
Run Code Online (Sandbox Code Playgroud)