12.03.2011
Suchergebnisse mit NSSortDescriptor sortieren
Ausgehend von dem Tutorial Simple Core Data Command Line Importer werden nun alle Core Data Datensätze ausgelesen und dann sortiert ausgegeben. Verwendet wird dafür der NSSortDescriptor
.
Das verwendete Datenmodell sieht folgendermaßen aus:
Die folgende Abbildung zeigt, daß mittels eines NSFetchRequest
und eines NSSortDescriptor
die drei Datensätze aus der Persistenzschicht ausgelesen und anschließend sortiert auf der Konsole ausgegeben werden sollen.
In der Datei main.m
wird die Methode searchAndPrintSorted()
ergänzt:
void searchAndPrintSorted() {
NSManagedObjectContext *context = managedObjectContext();
//Use NSSortDescriptor
NSSortDescriptor *personNameSort = [[NSSortDescriptor alloc] initWithKey:@"personname" ascending:YES];
NSArray *sorters = [NSArray arrayWithObject:personNameSort];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:context]];
[request setSortDescriptors:sorters];
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"]);
}
}
Der interessante Teil befindet sich in Zeile 5. Dort wird der NSSortDescriptor
allokiert und initialisiert. Als Sortierkriterium wird der personname
verwendet und es wird angegeben, daß das Ergebnis aufsteigend sortiert sein soll. Da die Methode setSortDescriptors
des NSFetchRequest
ein NSArray
als Parameter erwartet, wird der NSSortDescriptor
vor der Verwendung in ein Array gepackt.
Möchte man eine Liste mit Personen sortieren, bei der mehrere Personen den gleichen Nachnamen haben, gibt es die Möglichkeit einen weiteren NSSortDescriptor
, der nach Vornamen sortiert, in das NSArray
einzufügen. Damit würden die Personen mit gleichem Nachnamen anschließend noch nach dem Vornamen sortiert werden.