私はCoreDataに保存されたアーティストの束を持っていて、それらを名前で並べ替えるが、接頭辞 "the"は無視したい。だから、例えば "The Beatles"は "Beatles"としてソートされます。ちょっとiTunes/iPodのようなものです。"the"プレフィックスを取り除くためのNSSortDescriptor
は、だから私はそれがでソートするために使用することができますので、私のアーティストモデルにカスタムcleanName
プロパティを追加してみました:
NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"cleanName" ascending:YES];
明らかcleanName
としてアプリをダウンさせますそれSQLEntityのプロパティではありません。
...keypath cleanName not found in entity <NSSQLEntity Artist id=1>
私は店にcleanNameを保存することができますが、それはちょうど私に間違っているようです。 1つの新しい属性は、 "the"接頭辞の名前を削除するだけですか?本当に?
はので、代わりに、私は、カスタムcompareObjectでNSSortDescriptorをサブクラス化しようとした:toObject:実装:
- (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];
}
私は新しいアーティストを追加するときに、この作品は、私の店に「ビートルズ」と言います。アーティストは「ビートルズ」としてソートされ、私の「B」セクションに表示されます。しかし、すぐに私はそれをアプリを終了して再起動すると、私は次のエラーを取得し、テーブルビューはちょうど空のまま:あなたは私がログインしていたものから見ることができるように
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'
は、セクションタイトルはビートルズ(罰金です'セクションタイトルはBである必要があります)。しかし、このレコードは "Bonobo"の直前でなければならないので、ソートは壊れています。
これを修正する方法はありますか?
* cleanName *はどのように実装しましたか?それは、エンティティのための一時的な財産が行く方法になると思われる。 – Huperniketes
NSFetchedResultsControllersで並べ替えに一時的なプロパティを使用することはできません。 – samvermette