从你的问题和评论我猜你想要
[NSPredicate predicateWithFormat:@"mode = 0 AND (ALL enrollments.mode = 0)"]
更新
似乎 ALL 聚合不起作用。它抛出
'NSInvalidArgumentException', reason: 'Unsupported predicate (null)'
正如@yunas 注意到的那样。之前也注意到了这一点,例如
另一方面,ANY 聚合工作得很好。因此,作为WORKAROUND,可以将 ALL 替换为等效的 ANY 表达式:
[NSPredicate predicateWithFormat:@"mode = 0 AND NOT(ANY enrollments.mode != 0)"];
这实际上有效(我已经测试过了)!
更新 2
在讨论过程中,很明显 yunas 想要显示一个表格,其中每个组的模式=0,并且在表格行中显示该组的所有注册,模式=0。
第一个解决方案(可能更好):首先用上面给出的方法找到所有可接受的组。对于每一行 (in cellForRowAtIndexPath:
),过滤该组的注册并绘制单元格。
第二种解决方案:获取所有注册并按组排序。这只需要一个 fetch 请求,但结果不太适合作为 table view 数据源。获取请求如下所示:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Enrollment"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"mode = 0 AND group.mode = 0"];
request.predicate = predicate;
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"group.name" ascending:YES];
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"share" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];