Ios CoreData谓词ANY+;与许多人的关系

Ios CoreData谓词ANY+;与许多人的关系,ios,core-data,nspredicate,Ios,Core Data,Nspredicate,我在模型中定义了这些实体: [Sample] - results (to many relation with [Result]) [Parameter] - results (to many relation with [Result]) - compliant (number value) [Result] - parameter (relation with [Parameter]) - sample (relation with [Sample]) 对于[Sample]对象“MyS

我在模型中定义了这些实体:

[Sample]
- results (to many relation with [Result])

[Parameter]
- results (to many relation with [Result])
- compliant (number value)

[Result]
- parameter (relation with [Parameter])
- sample (relation with [Sample])
对于[Sample]对象“MySample”,我需要获取所有具有以下特性的[Parameter]对象:

[Result].compliant = 1 AND [Result].sample = MySample
因此,我尝试使用谓词获取[Parameter]对象,该谓词将是这些谓词的总和:

// returns all parameters that have a result compliant value equal to 1:
ANY results.compliant = 1

// returns all parameters related with my [Sample] object:
ANY results.sample = MySample
两个谓词都按预期工作,但我想一起使用,因为我需要获取与[Sample]对象连接的所有参数,这些参数的结果兼容值等于1

我试过这样的方法:

ANY (results.compliant = 1 AND results.sample = MySample)
(ANY results.compliant = 1) AND (ANY results.sample = MySample)
但它给了我“无效谓词”例外

我也尝试过使用子查询,但它给了我以下例外:

Can't have a non-relationship collection element in a subquery
我想指出,这个问题:

ANY results.compliant = 1 AND ANY results.sample = MySample
是一个有效的查询,但不是我要找的

如何使用一个谓词来解决这个问题,该谓词为我提供了所有[Parameter]对象,这些对象的[Result]对象与我的[Sample]对象相连,且符合性值等于1

更新:

使用NSCompoundPredicate未给出预期结果。我需要这样的东西:

ANY (results.compliant = 1 AND results.sample = MySample)
使用复合谓词的工作原理如下:

ANY (results.compliant = 1 AND results.sample = MySample)
(ANY results.compliant = 1) AND (ANY results.sample = MySample)
复合谓词为我提供的参数的符合值为1,并且参数的结果与MySample相关,但我需要的是获得的参数的结果与MySample相关,并且符合值为1(对于单个[result]对象,这两个条件都必须符合)。有什么办法可以做到这一点吗

更新2:


看来我使用了错误的子查询,解决方法是像应该使用的那样使用:-)使用子查询我可以得到正确的结果。

我建议使用NSCompoundPredicate

创建谓词并将它们添加到数组中,然后将它们指定为NSCompoundPredicate,如下所示

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];

我建议使用NSCompoundPredicate

创建谓词并将它们添加到数组中,然后将它们指定为NSCompoundPredicate,如下所示

NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subPredicates];

我正在电话上键入此项,因此可能存在语法错误,但这是您需要子查询的地方:

[NSPredicate predicateWithFormat:@"SUBQUERY(results, $r, $r.compliant = 1 AND $r.sample = %@).@count > 0", mySample]

我正在电话上键入此项,因此可能存在语法错误,但这是您需要子查询的地方:

[NSPredicate predicateWithFormat:@"SUBQUERY(results, $r, $r.compliant = 1 AND $r.sample = %@).@count > 0", mySample]

为什么不使用复合谓词?为什么不使用复合谓词?不幸的是,这不是我想要的。我将编辑问题以更好地解释问题。不幸的是,这不是我想要的。我将编辑问题以更好地解释这个问题。您在count中忘记了@,而是写了@%,而不是%@,所以这应该是:
[NSPredicate predicateWithFormat:@“子查询(results,$r,$r.compliant=1和$r.sample=%@.@count>0”,mySample]
,但这就是我要找的!以前我用错误的方式使用子查询,因此它会抛出异常,但您的解决方案很完美。@Darraski:谢谢,我已经修复了它。您在count中忘记了@,而写了@而不是%@,所以这应该是:
[NSPredicate predicateWithFormat:@“子查询(结果,$r,$r.compliant=1和$r.sample=%@)。@count>0”,mySample]
但这正是我想要的!以前我使用子查询的方式不正确,所以它会抛出异常,但您的解决方案是完美的。@Darraski:谢谢,我已经修复了它。