13.03.2011

Löschen von Core Data Einträgen

Ausgehend von dem Tutorial Simple Core Data Command Line Importer werden nun alle Core Data Datensätze ausgelesen und dann gelöscht. Zum Löschen wird die Methode deleteObject des ManagedObjectContext verwendet.

Das verwendete Datenmodell sieht folgendermaßen aus:

Die folgende Abbildung zeigt, daß mittels eines NSFetchRequest die Personendaten ausgelesen und anschließend durch ein deleteObject gelöscht werden.

In der Datei SimpleCommandLineImporter.m wird die Methode searchAndDelete ergänzt:

void searchAndDelete() {
    NSManagedObjectContext *context = managedObjectContext();
    
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context]];
    NSError *error = nil;
    
    NSArray *persons = [context executeFetchRequest:request error:&error];
    if(error) {
        NSLog(@"Cannot execute NSFetchRequest: %@", [error localizedDescription]);
        return ;
    }
    
    for(NSManagedObject *person in persons) {
        //Delete the Person
        [context deleteObject:person];

    }
}

Um die Datensätze auszulesen wird ein NSFetchRequest verwendet, der alle Einträge für das Entity Person ausliest. Das Ergebnis ist ein NSArray mit NSManagedObjects. In der for-Schleife unten werden die Personen dann mittels der Methode deleteObject des ManagedContext gelöscht.