2010-12-12 6 views
5

私は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"の直前でなければならないので、ソートは壊れています。

これを修正する方法はありますか?

+0

* cleanName *はどのように実装しましたか?それは、エンティティのための一時的な財産が行く方法になると思われる。 – Huperniketes

+0

NSFetchedResultsControllersで並べ替えに一時的なプロパティを使用することはできません。 – samvermette

答えて

3

数人の人とチャットした後、 "cleanName"をデータベースに保存することが最善の方法であり、 "正規化が過大評価されている"ようです。

+1

Appleは、WWDC 2010セッション118:コアデータのマスタリングでこのソリューションを推奨します。 –

+0

お気軽にお問い合わせください。ありがとうございました。 – samvermette

関連する問題