07.03.2011

Auslesen mit NSFetchRequest

Ausgehend von dem Tutorial Simple Core Data Command Line Importer werden nun alle Core Data Datensätze ausgelesen und auf der Konsole ausgegeben. Zum Auslesen wird ein NSFetchRequest verwendet.

Das verwendete Datenmodell sieht folgendermaßen aus:

Die folgende Abbildung zeigt, daß mittels eines NSFetchRequest die drei Datensätze aus der Persistenzschicht ausgelesen und anschließend auf der Konsole ausgegeben werden sollen.

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

void searchAndPrint() {
    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) {
        NSLog(@"Person: firstname: %@ lastname: %@", [person valueForKey:@"personfirstname"],[person valueForKey:@"personname"]);
    }
} 

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 Attribute-Werte ausgelesen und auf der Konsole ausgegeben.

Das Ergebnis sieht dann in etwa so aus:

2011-03-06 08:48:18.906 SimpleCommandLineImporter[22579:a0f] Person: firstname: Bart lastname: Simpson
2011-03-06 08:48:18.906 SimpleCommandLineImporter[22579:a0f] Person: firstname: Jörn lastname: Hameister
2011-03-06 08:48:18.907 SimpleCommandLineImporter[22579:a0f] Person: firstname: Donald lastname: Duck

Wie die Daten wieder gelöscht werden können, wird in dem Artikel: Löschen von Core Data Einträgen erklärt.