2012-07-09 42 views
0

我有以下数据模型:核心数据谓词:在NSDate上有活动的所有组?

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. 首先获得所有活动
  2. 然后把它们组为一组,以消除重复的组
  3. 转换设置为一个数组

这样:

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

取活动的一个数组,那么:

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

,所以我得到了有theTime至少一个活动的独特组的阵列?

是否有任何其他方式只做一个没有后处理的提取?

谢谢!

编辑:

我可以这样做:

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

???

回答

0

如果我明白你的问题,是的。

您可以对Group而不是Activity实体执行此操作。以这种方式,您可以避免获取第一个实体,然后应用过滤器。由于activities不是标量值,因此需要谓词修饰符(ANY,ALL等)或SUBQUERY。

关于您的问题,我会做到以下几点:

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

关于谓语,我想宥要查找包含包含在specificified范围Activity IES Group秒。

试着让我知道。希望有所帮助。