Ich habe eine Reihe von Künstlern in CoreData gespeichert und möchte sie nach Namen, aber ignorieren das Präfix "the". Zum Beispiel würden "The Beatles" als "Beatles" sortiert werden, ähnlich wie das, was iTunes/iPod macht. SoNSSortDescriptor zum Entfernen der "Präfix"
Ich habe versucht, eine benutzerdefinierte cleanName
Eigenschaft meiner Künstler-Modell hinzugefügt, so dass es für die Sortierung mit verwendet werden:
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"cleanName" ascending:YES];
, die offensichtlich nach unten bringt die App als cleanName
ist nicht eine Eigenschaft des SQLEntity:
...keypath cleanName not found in entity <NSSQLEntity Artist id=1>
Ich weiß, ich könnte den cleanName im Laden speichern, aber es scheint mir einfach falsch. Ein neues Attribut, nur um den Namen des "Präfix" zu entfernen? "Ja wirklich?"
Anstatt also habe ich versucht, NSSortDescriptor mit einem benutzerdefinierten compareObject Subklassen: toObject: Umsetzung:
- (NSComparisonResult)compareObject:(Artist*)artist1 toObject:(Artist*)artist2 {
NSString *cleanString1 = [artist1.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist1.name length])];
NSString *cleanString2 = [artist2.name stringByReplacingOccurrencesOfString:@"the " withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [artist2.name length])];
return [artist1.cleanName compare:artist2.cleanName options:NSCaseInsensitiveSearch];
}
Dies funktioniert, wenn ich einen neuen Künstler hinzufügen, sagen: "The Beatles" zu meinem Speicher. Der Künstler ist als "Beatles" sortiert und wird in meinem "B" Abschnitt angezeigt. Aber sobald ich die App beenden und neu starten es, erhalte ich die folgende Fehlermeldung und die Tableview bleibt einfach leer:
sectionIndex A for Apparat
sectionIndex B for Bonobo
sectionIndex M for Misteur Valaire
sectionIndex M for Moderat
sectionIndex P for Paul Kalkbrenner
sectionIndex R for Röyksopp
sectionIndex B for The Beatles
NSFetchedResultsController ERROR: The fetched object at index 6 has an out of order section name 'R. Objects must be sorted by section name'
Wie Sie sehen können, was ich anmelden, die Abschnittstitel sind in Ordnung (The Beatles 'Titel der Sektion ist B, wie es sein sollte. Aber die Sortierung ist kaputt, da diese Aufzeichnung direkt vor "Bonobo" stehen sollte.
Eine Idee, wie Sie das beheben können?
Wie haben Sie * cleanName * implementiert? Es würde scheinen, eine vorübergehende Eigenschaft für die Entität wäre der Weg zu gehen. – Huperniketes
Ich bin mir ziemlich sicher, dass vorübergehende Eigenschaften nicht zum Sortieren in NSFetchedResultsControllers verwendet werden können. – samvermette