核心数据谓词:所有在NSDate上都有活动的群组?

时间:2012-07-09 05:00:14

标签: iphone ios core-data nsdate fetch

我有以下数据模型:

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. 然后将他们的组放入Set中以删除重复的组
  3. 将Set转换为数组
  4. 这样:

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

    然后获取一系列活动:

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

    所以我得到了一组在TheTime上至少有一个活动的唯一群组?

    有没有其他方法可以在没有后处理的情况下进行提取?

    谢谢!

    编辑:

    我可以这样做:

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

    ???

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,是的。

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

关于您的问题,我会执行以下操作:

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

关于谓词,我想yuo想找到包含在特定范围内的GroupActivity

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