2016-08-05 4 views
0

私は1対多の関係を持つ2つのCoreData実体がある -関連するプロパティによってフェッチリクエストを並べ替えるにはどうすればいいですか?

連絡先が複数の電話番号を持つことができ、私はPhoneNumbersプロパティでContactsをソートする必要がある、と私はソートしたいContact(メイン)とPhoneNumber(関連します)それregisteredプロパティにtrue値の既存の、例えばによって:

 
Contact1 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false} 
    ] 

Contact2 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = true} 
    ] 

Contact3 
    prop1 = "value1" 
    prop2 = "value2" 
    PhoneNumbers = [ 
    {prop1 = "value1", prop2 = "value2", registered = false}, 
    {prop1 = "value1", prop2 = "value2", registered = false} 
    ] 

Contact2registered = truePhoneNumberあり、私は結果のトップ

をフェッチに移動したいです

マイソート記述子:私は(データモデルの関係など)phoneNumbersキーを指定すると、私は、でも、引数の型であればunsupported NSSortDescriptor selector: registeredCompare:にエラー変更を別のキーに変更すると

[NSSortDescriptor sortDescriptorWithKey:@"phoneNumbers" ascending:YES selector:@selector(registeredCompare:)]; 

、私はエラーTerminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

を受け取ります正しいです

関連するプロパティでデータを並べ替えるにはどうすればよいですか?

コンパレータ(NSSortDescriptor sortDescriptorWithKey:ascending:comparator:)はNSFetchRequest
によってサポートされていない配列にすべての値を取得し、それが解決策ではありません並べ替える - あまりにも多くの連絡先はあなたが対多の関係でソートすることはできませんアプリケーション

答えて

0

を凍結することができます。連絡先ごとに複数のPhoneNumbersが存在する可能性があります。どのContactが最初に来るかを決めるために、CoreDataは各Contactに対して単一の値を必要とします。

registeredCompareはソートセレクタとして認識されないため、2番目のエラーが発生します。 Core Data Programming Guideから:

のSQLiteでサポートされているソートセレクタが比較されますとcaseInsensitiveCompare :, localizedCompare :, localizedCaseInsensitiveCompare :,およびlocalizedStandardCompare :.あなたの問題へ

一つの解決策はContactエンティティにブール属性を追加することです、あなたが/ /変更を追加関連の電話番号を削除するときにtrueまたはfalseに更新hasRegisteredPhoneNumberを言います。その新しい属性をソートキーとして使用します。

関連する問題