NSSortDescriptor, чтобы убрать « Префикс

У меня есть группа художников, хранящихся в CoreData, и я хочу отсортировать их по имени, но игнорируя префикс «the». Так, например, «Битлз» будут отсортированы как «Битлз», вроде того, что делает iTunes / iPod.

Я попытался добавить собственное свойство cleanName в свою модель исполнителя, чтобы его можно было использовать для сортировка с помощью:

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"cleanName" ascending:YES];

Это, очевидно, вызывает сбой приложения, поскольку cleanName не является свойством SQLEntity:

...keypath cleanName not found in entity <NSSQLEntity Artist id=1>

Я знаю, что могу сохранить cleanName в магазине, но мне это кажется неправильным. Один новый атрибут только для того, чтобы в имени не было префикса «the»? Правда?

Поэтому вместо этого я попытался создать подкласс NSSortDescriptor с помощью настраиваемого compareObject: toObject: implementation:

- (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];
}

Это работает, когда я добавляю нового исполнителя, скажем "The Beatles" в мой магазин. Исполнитель отсортирован как «Битлз» и отображается в моем разделе «Б». Но как только я выхожу из приложения и перезапускаю его, я получаю следующую ошибку, и табличное представление остается пустым:

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'

Как вы можете видеть из того, что я регистрирую, заголовки разделов в порядке (заголовок раздела The Beatles - Б, как и должно быть). Но сортировка не работает, так как эта запись должна быть прямо перед "Bonobo".

Есть идеи, как это исправить?

5
задан samvermette 12 December 2010 в 02:39
поделиться