20

CoreDataで単一のオブジェクトを削除する方法を知っています。複数のオブジェクトを削除するもっと簡単な方法があるかどうか疑問に思っていますか?

単一の削除には、次を使用できます

[moc deleteObject:someManagedObject];

ただし、複数のオブジェクトに相当するものはありません。

現時点で私はやろうと思っています...

NSArray *arrayOfManagedObjectsToDelete = //...

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

しかし、これを行う別の方法があるかどうかはわかりませんでしたか?

理想的には...のような方法

- (void)deleteObjects:(NSSet*)objects

NSManagedObjectContextまたは同様の方法。

4

5 に答える 5

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 
}

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
于 2015-08-24T11:20:51.893 に答える
7

私が知っているように、そのための方法はありません...あなたはすでにやっているようにすべきです。呼び出されるメソッドがありdeletedObjectsますが、クラス リファレンスで説明されているように、次の保存操作中に永続ストアから削除されるオブジェクトのセットを返すだけです。

于 2013-01-28T11:30:20.947 に答える
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];
    }
}
于 2013-01-28T11:34:31.547 に答える