1

我想要一个简单的谓词,它返回所有模式 = 0 且组中注册模式 = 0 的组

准确地说,我需要一个谓词来访问嵌套对象属性。不知何故,像这样的谓词:

[NSPredicate predicateWithFormat:@"mode = 0 AND enrollments.Enrollment.mode = 0"]

上述谓词是错误的,显然不起作用。

编辑:

我也尝试了以下谓词,但没有成功。

[NSPredicate predicateWithFormat:@"mode = 0 AND ALL ( SUBQUERY(enrollments,$varEnrollment,$varEnrollment.mode = 0))"]

我需要包含所有活动组(group.mode = 0)和所有活动参与者(enrolles.mode = 0)的结果,但对我来说,这个谓词不起作用。

4

1 回答 1

6

从你的问题和评论我你想要

[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];
于 2012-08-13T13:24:44.283 回答