用于多对多关系的 NSPredicate

Posted

技术标签:

【中文标题】用于多对多关系的 NSPredicate【英文标题】:NSPredicate for to-many relationship 【发布时间】:2013-10-09 13:57:34 【问题描述】:

我有对象Movie,有一对多关系events 每个事件,都有属性date 我需要使用在具体日期发生事件的此类电影创建 fetchedResultController

- (NSFetchedResultsController *)fetchedResultsControllerForEntertainments:(Class)className date:(NSDate *)date

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass(className)];
NSDateFormatter *dateFormatter = [NSDateFormatter new];
dateFormatter.dateFormat = @"yyyy/MM/dd";
NSDate *startDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:date]];
NSDateComponents *oneDay = [NSDateComponents new];
oneDay.day = 1;
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:oneDay toDate:startDate options:0];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(events, $s, ($s.date >= %@ AND $s.date < %@)).@count > 0", startDate, endDate];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"objectId" ascending:YES];
fetchRequest.sortDescriptors = @[sortDescriptor];
fetchRequest.fetchBatchSize = 20;
NSFetchedResultsController *fetchResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
return fetchResultsController;

我想创建一个谓词,它将返回我的电影,该电影具有当前日期的事件

【问题讨论】:

你的意思是它没有像你想要的那样工作?能说清楚一点吗? 发布一段代码进行测试(以及测试数据,因为设置起来很麻烦,你自己来!) 您是否验证过startDateendDate 包含预期值? 是的,所有日期都正确 还有什么问题?没有结果,错误的结果,崩溃......?您必须提供更多信息。 【参考方案1】:

我认为这是一个错字 - $s.date &gt;= %@ AND $s.date &lt; %@ 是这个 正确的?那是不可能的情况,请检查一下。 编辑: 我弄错了。没错

【讨论】:

以上是关于用于多对多关系的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

Remove() 不适用于实体框架中的多对多关系

用于多对多关系的 NSPredicate 过滤器

如何为多对多关系创建 UI?

在 symfony/doctrine 的 schema.yml 中,我应该在哪里放置 onDelete: CASCADE 用于多对多关系?

从多对多关系中获取核心数据

用于简单数据模型和多对多关系的 Optimal Entity Framework 4 查询