0

私は次のデータモデルを持っています:

Group(name, color, activities*) // one group may have many activities
Activity(startTime, endTime, location, Group*) // startTime and endTime are NSDate, group is an inverse relationship

したがって、指定されたNSDate、たとえばtheTimeに少なくとも1つのアクティビティがあるすべてのグループを取得する場合、どの述語を作成する必要がありますか?

私の考え:

  1. 最初にすべてのアクティビティを取得します
  2. 次に、重複するグループを削除するために、グループをセットに入れます
  3. セットを配列に変換します

それで:

[NSPredicate predicateWithFormat:@"%@ >= startTime AND %@ <= endTime", theTime]

次に、アクティビティの配列をフェッチします。

for (Activity *activity in activities)
{
    [theSet add:activity.group];
}

だから私はtheTimeで少なくとも1つのアクティビティを持つユニークなグループの配列を手に入れましたか?

後処理なしでフェッチを実行する他の方法はありますか?

ありがとう!

編集:

僕にできる:

[NSPredicate predicateWithFormat:@"%@ >= activities.startTime AND %@ <= activities.endTime", theTime]

???

4

1 に答える 1

0

私があなたの質問をよく理解していれば、そうです。

あなたはそれを実体のGroup代わりに影響を与えることをすることができますActivity。このようにして、最初にエンティティをフェッチしてからActivityフィルターを適用することを回避できます。activitiesはスカラー値ではないため、述語修飾子(、、ANYなどALL)またはSUBQUERYが必要です。

あなたの質問について私は次のことをします:

[NSPredicate predicateWithFormat:@"(SUBQUERY(activities, $x, $x.startTime >= %@ and $x.endTime <= %@).@count > 0)", theStartTime, theEndTime];

述語については、yuoが特定の範囲に含まれるiesGroupを含むsを見つけたいと思います。Activity

試して、私に知らせてください。お役に立てば幸いです。

于 2012-07-09T08:11:24.170 に答える