Mitglied 7974
Gast
Hallo, zusammen!
Ich habe eine Frage zu Core Data: Wie sortiert man in Core Data nach der Länge eines String-Attributs innerhalb eines NSManagedObjects? Ich will dasselbe erreichen, wie wenn man in einer SQL-Datenbank eine Spalte nach String-Länge sortiert:
Mein Ansatz wäre gewesen, dem zu erstellenden NSFetchRequest einen entsprechenden NSSortDescriptor hinzuzufügen, der folgendermaßen erzeugt wird:
Xcode meckert nicht und führt das so erstellte Request auch aus, aber als Resultat bekomme ich eine lediglich alphabetisch sortierte Liste.
Daher habe ich im zweiten Ansatz versucht, Core Data über einen NSComparator klar zu machen, was ich eigentlich will:
Das liefert mir allerdings wiederum nur eine alphabetisch sortierte Liste zurück. Die String-Länge wird erneut ignoriert.
Was mache ich also falsch? Wo und was habe ich bei Core Data falsch verstanden? Kann man mit Core Data überhaupt nach der Länge eines String-Attributs sortieren?
Danke
Matthias
Ich habe eine Frage zu Core Data: Wie sortiert man in Core Data nach der Länge eines String-Attributs innerhalb eines NSManagedObjects? Ich will dasselbe erreichen, wie wenn man in einer SQL-Datenbank eine Spalte nach String-Länge sortiert:
Code:
SELECT TheStringAttribute FROM MyTable ORDER BY LENGTH(TheStringAttribute) ASC;
Mein Ansatz wäre gewesen, dem zu erstellenden NSFetchRequest einen entsprechenden NSSortDescriptor hinzuzufügen, der folgendermaßen erzeugt wird:
Code:
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"TheStringAttribute.length" ascending:YES];
Xcode meckert nicht und führt das so erstellte Request auch aus, aber als Resultat bekomme ich eine lediglich alphabetisch sortierte Liste.
Daher habe ich im zweiten Ansatz versucht, Core Data über einen NSComparator klar zu machen, was ich eigentlich will:
Code:
NSSortDescriptor *descriptor =
[[NSSortDescriptor alloc] initWithKey:@"TheStringAttribute" ascending:YES comparator:^(id str1, id str2) {
if ([str1 length] < [str2 length])
{
return (NSComparisonResult)NSOrderedAscending;
}
else if ([str1 length] > [str2 length])
{
return (NSComparisonResult)NSOrderedDescending;
}
else
{
return (NSComparisonResult)NSOrderedSame;
}
}];
Das liefert mir allerdings wiederum nur eine alphabetisch sortierte Liste zurück. Die String-Länge wird erneut ignoriert.
Was mache ich also falsch? Wo und was habe ich bei Core Data falsch verstanden? Kann man mit Core Data überhaupt nach der Länge eines String-Attributs sortieren?
Danke
Matthias