Ios 在多对一关系中,我使用什么谓词来获取不同的对象?
实体关系如下所示Ios 在多对一关系中,我使用什么谓词来获取不同的对象?,ios,objective-c,core-data,nsfetchrequest,Ios,Objective C,Core Data,Nsfetchrequest,实体关系如下所示 Effect <->> EffectFilterProperty <<-> FilterProperty <<-> Filter 您需要反向关系来获取与效果相关的过滤器。 精确的答案取决于哪种反向关系是1,哪种是1 对很多人来说。例如,如果你有 “filterProperty”作为从“Filter”到“filterProperty”的一种关系 “effectFilters”对于从“FilterProperty”到“Eff
Effect <->> EffectFilterProperty <<-> FilterProperty <<-> Filter
您需要反向关系来获取与效果相关的过滤器。
精确的答案取决于哪种反向关系是1,哪种是1
对很多人来说。例如,如果你有
- “filterProperty”作为从“Filter”到“filterProperty”的一种关系
- “effectFilters”对于从“FilterProperty”到“EffectFilterProperty”的许多关系
- 对于从“EffectFilterProperty”到“effect”的一种关系,“effect”
[NSPredicate predicateWithFormat:@"ANY filterProperty.effectFilters.effect.name = %@",
theEffectName];
如果所有反向关系都为一,则省略“ANY”。如果不止一个
相反的关系对很多人来说是复杂的,你需要
使用“子查询”的谓词
根据更新的问题进行更新:“ANY”不适用于多个
嵌套到多个关系,您需要一个“子查询”:
关于获取“不同的”对象:获取请求总是返回不同的托管对象
对象,它将不会两次返回同一对象。-如果您需要具有
如果某些或所有属性的值不同,则必须设置获取请求
resultType
toNSDictionaryResultType
和returnsDistinctResults
toYES
顺便说一句,核心数据没有“独特的”SQL关键字类型功能吗?实际上,正如您所提到的,存在不止一对多的反向关系。。。我已经用两边的关系更新了问题。wont NSPredicate*predicate=[NSPredicate predicateWithFormat:@“ANY filterProperties.effectFilterProperties.effect.name=%@”,effectName];这样行吗?@avirabajpai:我已经用一些应该行得通的东西更新了答案(当然可能有拼写错误)。
[NSPredicate predicateWithFormat:@"ANY filterProperty.effectFilters.effect.name = %@",
theEffectName];
[NSPredicate predicateWithFormat:@"SUBQUERY(filterProperties, $fp, ANY $fp.effectFilterProperties.effect.name = %@).@count > 0", effectName];