用于多对多关系的 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;
我想创建一个谓词,它将返回我的电影,该电影具有当前日期的事件
【问题讨论】:
你的意思是它没有像你想要的那样工作?能说清楚一点吗? 发布一段代码进行测试(以及测试数据,因为设置起来很麻烦,你自己来!) 您是否验证过startDate
和endDate
包含预期值?
是的,所有日期都正确
还有什么问题?没有结果,错误的结果,崩溃......?您必须提供更多信息。
【参考方案1】:
我认为这是一个错字 - $s.date >= %@ AND $s.date < %@
是这个
正确的?那是不可能的情况,请检查一下。
编辑:
我弄错了。没错
【讨论】:
以上是关于用于多对多关系的 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章
在 symfony/doctrine 的 schema.yml 中,我应该在哪里放置 onDelete: CASCADE 用于多对多关系?