Dar*_*ski 1 core-data nspredicate ios
我在我的模型中定义了这些实体:
[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])
Run Code Online (Sandbox Code Playgroud)
对于[Sample]对象"MySample",我需要获取所有[Parameter]对象:
[Result].compliant = 1 AND [Result].sample = MySample
Run Code Online (Sandbox Code Playgroud)
所以,我正在尝试使用谓词来获取[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
Run Code Online (Sandbox Code Playgroud)
两个谓词都按预期工作,但我想一起使用它,因为我需要获得与我的[Sample]对象连接的所有参数,其结果兼容值等于1.
我尝试过类似的东西:
ANY (results.compliant = 1 AND results.sample = MySample)
Run Code Online (Sandbox Code Playgroud)
但它给了我"无效的谓词"例外.
我也试过使用SUBQUERY,但它给了我那些例外:
Can't have a non-relationship collection element in a subquery
Run Code Online (Sandbox Code Playgroud)
我想注意,那个查询:
ANY results.compliant = 1 AND ANY results.sample = MySample
Run Code Online (Sandbox Code Playgroud)
是一个有效的查询,但不是我正在寻找的.
如何使用单个谓词来解决这个问题,该谓词为我提供了所有[Parameter]对象,这些对象的[Result]对象与我的[Sample]对象相关并且符合值等于1?
更新:
使用NSCompoundPredicate不给我预期的结果.我需要这样的东西:
ANY (results.compliant = 1 AND results.sample = MySample)
Run Code Online (Sandbox Code Playgroud)
并使用复合谓词的工作原理如下:
(ANY results.compliant = 1) AND (ANY results.sample = MySample)
Run Code Online (Sandbox Code Playgroud)
复合谓词为我提供了一个参数,其参数的符合性值等于1,参数的结果与MySample相关,但我需要的是获得与MySample相关的结果并且符合值等于1的参数(两者都是必须为单个[Result]对象编译条件.任何想法如何实现?
更新2:
看来我使用了错误的SUBQUERY,解决方案是使用它应该使用:-)使用SUBQUERY我可以得到正确的结果.
我在手机上输入这个,因此可能存在语法错误,但这是您需要子查询的地方:
[NSPredicate predicateWithFormat:@"SUBQUERY(results, $r, $r.compliant = 1 AND $r.sample = %@).@count > 0", mySample]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3055 次 |
| 最近记录: |