Подтвердить что ты не робот

CoreData удаляет несколько объектов

Я знаю, как удалить один объект в CoreData. Мне просто интересно, есть ли более простой способ удаления нескольких объектов?

Для одиночного удаления вы можете использовать

[moc deleteObject:someManagedObject];

но нет эквивалента для нескольких объектов.

В настоящий момент я собираюсь сделать...

NSArray *arrayOfManagedObjectsToDelete = //...

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

но я не был уверен, есть ли другой способ сделать это?

в идеале такой метод, как...

- (void)deleteObjects:(NSSet*)objects

on NSManagedObjectContext или какой-либо подобный метод.

4b9b3361

Ответ 1

iOS10 и Swift 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 }

Это удаляет все объекты EntityName, но вы можете применить дополнительную фильтрацию с помощью NSPredicate

Ответ 2

iOS 9

Swift

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

Ответ 3

Как я знаю, для этого нет метода... Вы должны делать то, что вы уже делаете. Существует метод deletedObjects, но он просто возвращает набор объектов, которые будут удалены из их постоянного хранилища во время следующей операции сохранения, как описано в описании класса.

Ответ 4

Нет, нет конкретного метода удаления нескольких объектов 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];
    }
}