核心数据 – 复杂的获取

这是我的核心数据模型:

Conference ========== name events (to-many relationship to Event object) Event ====== date type (int - private=0, public=1) conference (to-one relationship to Conference object) 

所以会议可以有很多活动,活动只有一个会议:

 Conference > Event 

我有一个复杂的提取,我不知道该怎么做,这就是我需要的:

3个顶级会议,公共活动最多,符合基本条件,意思是:
1.会议至少举办一次私人活动。
2.会议至少有5次公开活动。
3.应根据最近10天计算

我不确定我是应该直接查询Conference对象还是查询Event对象,而不是使用event.conference过滤相应的会议

效率很重要,因此如果可能使用获取限制或其他优化。

您可以使用SUBQUERY在单个提取请求中执行此操作:

  NSDateComponents* components = [[NSCalendar currentCalendar] components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]]; [components setDay:[components day] - 10]; NSDate* tenDaysAgo = [[NSCalendar currentCalendar] dateFromComponents:components]; NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Conference class])]; fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(events, $event, $event.type = 0 AND $event.date > %@).@count >= 1 AND SUBQUERY(events, $event, $event.type = 1 AND $event.date > %@).@count >= 5", tenDaysAgo, tenDaysAgo]; fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"events.count" ascending:NO]; fetchRequest.fetchLimit = 3; 

注意 :带有events.count的排序描述符仅适用于内存存储或二进制存储,但它会因SQLite存储而崩溃( 此处有更多相关信息)。 在这种情况下,您应该在获取后对结果进行排序和限制。