Tag Archives: Core Data

Deleting from Core Data

Deleting objects from Core Data should not be recognized as deleting rows from SQLite table. It is like deleting objects from Object Graph. This is an example of deleting all rows for the current file number. I retrieve all NSManagedObject objects and delete them in cycle.

+ (BOOL)deleteScrollPositionsForFileNumber:(NSInteger)fileNumber {
    BOOL success;
    useDelegate
    NSManagedObjectContext *context = appDelegate.managedObjectContext;
    if (context == nil) {
        NSLog(@"Error: No context");
        success = NO;
        return success;
    }
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"fileNumber == %d", fileNumber];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ScrollPosition" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    [fetchRequest setPredicate:predicate];
    NSError *error = nil;
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    NSLog(@"Number of deleted objects: %d", [fetchedObjects count]);
    for (NSManagedObject *object in fetchedObjects) {
        [context deleteObject:object];
    }
    success = YES;
    return success;
}

Немного о CoreData

Core Data – это объектноориентированная оболочка над базой данных приложения в iOS/Mac OS. Позволяет создавать таблицы визуально, сама следит за Commitment Control, управлением версиями и т.д.

Persistent Store – это “надежное” хранилище данных. (NSPersistenStoreCoordinator). Данные хранятся в applicationDocumentsDirectory/App.sqlite. Где App.sqlite – это база SQLite приложения.
Context – это instance базы. Промежуточное хранилище, в котором производятся изменения и затем утверждаются (Commitment). Также запрос производится из Context. У одной базы может быть много Context. В каждом Context есть Managed Objects.
Managed Object – объект, с которым мы работаем, но изменения, которые мы в него вносим не вносятся в Persistent Store до тех пор, пока мы не сделаем Save.

CoreData – Core Data Programming Guide

CoreDataSnippets – Core Data Code Snippets

Базовый запрос без предиката всех строк из таблицы:

Запрос с фильтрацией – аналог WHERE в SQL :