2016-06-25 2 views
0

私は2つのエンティティ間に多対多の関係を持っています。 AおよびBここではNSFetchRequest to-manyキーは使用できません

私はB.relationshipのカウントが0より大きいとBによって並べ替えのdateCreatedプロパティところ、すべてのAためB.relationshipの配列を返すようにしたいです。

これは私が現在持っているコードで、もう少し意味があります。

let fetchRecentVariationsRequest = NSFetchRequest(entityName: "Variation") 
fetchRecentVariationsRequest.predicate = NSPredicate(format: "ANY [email protected] > 0") 
fetchRecentVariationsRequest.sortDescriptors = [NSSortDescriptor(key: "activities.dateCreated", ascending: true)] 

私は次の例外を取得し、要求を実行すると:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here’私はエラーを取得していますなぜ私が理解

しかし、どのように私をソート記述子内には多くのプロパティにコアデータ?

編集

より明確にするために、私は彼らのdateCreated財産(新しい順)でソートされた6つの最新Activityエンティティを取得したいと思います。

次に、Activityエンティティのvariations関係を介して、これらのフェッチされたActivityエンティティに関連するすべてのVariationエンティティを取得したいと思います。

+0

更新していただきありがとうございます。 2つのQ:最初のアクティビティに3つのバリエーションがあるとします。どのような順序でソートする必要がありますか?バリエーションが最初のアクティビティと5番目のアクティビティに関連している場合は、最終結果に2回表示されますか? – pbasdf

+0

問題ありません。 1) 'Variation'エンティティの' name'プロパティでソートされます。 2)私のモデルでは可能ではないはずです –

答えて

0

対多関係の属性でソートすることはできません。意味がないためです。 CoreDataは、最初に配置するバリエーションを決定する必要があります。ソート・ディスクリプタには、「関連するアクティビティでdateCreatedの値を使用する」と表示されます。しかし、いくつかのアクティビティがあり、各バリエーションごとに異なるdateCreated値がいくつかあります。どのアクティビティのdateCreatedを使用する必要がありますか?最後?最初?平均?

しかし、概念上の問題以上に、CoreDataは、(少なくともSQLiteストアからのフェッチのために)ソートするために、属性または1対1の関係を使用することのみを許可します。一時的なプロパティはありません。計算された特性はありません。したがって、最新の関連アクティビティのdateCreatedを使用する場合は、アクティビティがリレーションシップに追加されるたびに更新するVariationに属性を追加する必要があります。

EDIT

あなたの更新を考えると、私は最初に、最新の6つの活動フェッチします:

fetchRecentActivitiesRequest = NSFetchRequest(entityName: "Activity") 
fetchRecentActivitiesRequest.sortDescriptors = [NSSortDescriptor(key: "dateCreated", ascending: false)] 
fetchRecentActivitiesRequest.fetchLimit = 6 
// I recommend using the next line to fetch the related Variations in one go 
fetchRecentActivitiesRequest.relationshipKeyPathsForPrefetching = ["variations"] 
let recentActivities = try! context.executeFetchRequest(fetchRecentActivitiesRequest) as! [Activity] 

をしてから対応するVariationsを取得するためにvariations関係を使用します。

let nameSort = NSSortDescriptor(key: "name", ascending: true) 
let recentVariations = recentActivities.flatMap() { 
    $0.variations!.sortedArrayUsingDescriptors([nameSort]) 
} 
+0

どのような 'NSfetchRequest'を使っていますか? –

+0

@AdamCarter投稿を編集して、どのようにソートしたいかを説明することができますか? – pbasdf

+0

私の質問をもう少し明確に更新しました:) –

関連する問題