ios - CoreData 谓词 ANY + AND 与多对多关系

标签 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] 对象“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)

但它给了我“无效的谓词”异常(exception)。

我也尝试过使用 SUBQUERY,但它给了我这些异常:
Can't have a non-relationship collection element in a subquery

我想注意,该查询:
ANY results.compliant = 1 AND ANY results.sample = MySample

是一个有效的查询,但不是我要找的。

如何使用单个谓词解决此问题,该谓词为我提供所有 [Parameter] 对象,这些对象具有与我的 [Sample] 对象连接的 [Result] 对象并且符合值等于 1 ?

更新:

使用 NSCompoundPredicate 没有给我预期的结果。我需要这样的东西:
ANY (results.compliant = 1 AND results.sample = MySample)

并且使用复合谓词的工作方式如下:
(ANY results.compliant = 1) AND (ANY results.sample = MySample)

复合谓词为我提供了结果符合值等于 1 的参数和结果与 MySample 相关的参数,但我需要的是获取结果与 MySample 相关且符合值等于 1 的参数(两者必须为单个 [Result] 对象遵守条件)。任何想法如何实现这一目标?

更新 2:

看来我使用了错误的 SUBQUERY,解决方案是使用应该使用的方法 :-) 使用 SUBQUERY 我可以获得正确的结果。

最佳答案

我在手机上输入这个,所以可能有语法错误,但这是你需要一个子查询的地方:

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

关于ios - CoreData 谓词 ANY + AND 与多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026765/

相关文章:

android - 跨平台套接字库 - Android 和 IOS

ios - 找不到 '.momd' 文件

iphone - 将 NSManagedObjects 添加到一对多关系

ios - 核心数据 : Same predicate (IN) returns different fetched results after a Save operation

swift - 核心数据谓词按今天的日期过滤

iphone - NSFetchRequest 不适用于谓词

iphone - OpenGL ES 2.0 iOS中的Sphere

android - 开源用户安全/密码方案

ios - 如何重新获取 NSManagedContext 中存在的对象

ios - 如何为 WKWebview 添加超时