我有以下 CoreData 对象模型
现在我在使用以下条件制作谓词时遇到问题。
获取所有那些 DBOpportunity
WHERE
DBOpportunity.stateCode == 1
和
DBOpportunity.invoiceDate >= GIVEN_DATE
和
DBOpportunityLines.crmAccept == 1 或 DBOpportunityLines.crmAccept == 3
我已经尝试了 apple 提供的大量示例和编程指南但无法实现这一目标。
最佳答案
opportunitylines
是一种对多 关系,因此一个 DBOpportunity 对象有多个 DBOpportunityLines 对象。假设最后一个条件
DBOpportunityLines.crmAccept == 1 OR DBOpportunityLines.crmAccept == 3
应该适用于任何的相关对象,您需要一个子查询:
NSDate *givenDate = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"stateCode == 1 AND invoiceDate >= %@ "
"AND SUBQUERY(opportunitylines, $x, $x.crmAccept == 1 OR $x.crmAccept == 3).@count > 0",
givenDate];
备注:不幸的是,在谓词中使用 SUBQUERY 的文档很少。有 one example在 NSExpression 类引用中。另见 Quick Explanation of SUBQUERY in NSPredicate Expression .
关于ios - 具有关系的 CoreData NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728294/