2010-12-16 14 views
10

Gegeben eine , die Objekte enthält, die eine Unterklasse mit einem Zeichenfolgenattribut namens name sind, wie kann ich das Set nach Name sortieren? Würde ich hier eine NSPredicate verwenden?Sortieren eines NSSet von NSManagedObjects nach Attribut

Vielen Dank!

+2

korrigieren Sie mich, wenn ich m falsch, aber ich glaube, NSSet ist ungeordnet, was bedeutet, dass die enthaltenen Elemente in keiner bestimmten Reihenfolge (konzeptionell) sind, was bedeutet, dass ein "NSSet" nicht sortiert werden kann. Sie können die Objekte in ein 'NSArray' platzieren, das geordnet ist und sortiert werden kann. – filipe

+1

Klingt wie das ist, was das OP fragt ... –

Antwort

33

Nein, aber Sie würden eine NSSortDescriptor verwenden.

Sie die sortedArrayUsingDescriptors: Methode wie folgt verwenden würde:

NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; 
NSArray *sorted = [yourSet sortedArrayUsingDescriptors:[NSArray arrayWithObject:nameDescriptor]]; 
+0

Danke! Müssten diese zur Speicherverwaltung freigegeben werden? –

+0

@Bill Das 'sortierte' Array ist automatisch freigegeben, also nein. –

+0

und wenn ich NSSet von sortierten NSArray von \t NSSet (Array: <# [AnyObject] #>)) erstellen, wird es Ordnung halten? – BaSha

5

durch die Erwähnung NSPredicate, ich fühle mich, als ob die OP holen den Satz als Teil der Hingerichteten sortieren wollte. Ob er das meinte oder nicht, hier ist ein Beispiel dafür. Angenommen, Sie haben eine zu viele umgekehrte Beziehung zwischen einer Angestellteneinheit und einer Abteilungsentität, d. H. Eine Abteilung enthält viele Mitarbeiter. Gegeben Sie die Abteilung bereits geholt haben, die Mitarbeiter in der Abteilung holen und sortieren sie nach Vornamen:

Mit MagicalRecord:

Department *department = someFetchedDepartment; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@", department]; 
NSArray *sortedEmployees = [Employee MR_findAllSortedBy:@"firstName" ascending:YES withPredicate:predicate]; 

Ohne MagicalRecord:

NSFetchRequest *request = [[NSFetchRequest alloc] init];  

NSEntityDescription *employeeEntity = [NSEntityDescription @"Employee" inManagedObjectContext:self.context]; 
[request setEntity:employeeEntity]; 

Department *department = someFetchedDepartment; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department == %@", department]; 
[request setPredicate:predicate]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:ascending]; 
[request setSortDescriptors:@[sortDescriptor]]; 

NSError *error = nil; 
NSArray *sortedEmployees = [self.context executeFetchRequest:request error:&error]; 
+0

MagicalRecord ??? –

+0

MagicalRecord: https://github.com/magicalpanda/MagicalRecord. OP hätte das wirklich als eine Lösung für Dritte herausstellen müssen. – Demitri

Verwandte Themen