Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在多对一关系中,我使用什么谓词来获取不同的对象?_Ios_Objective C_Core Data_Nsfetchrequest - Fatal编程技术网

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”
然后,您将使用谓词对“Filter”实体执行一个fetch请求

[NSPredicate predicateWithFormat:@"ANY filterProperty.effectFilters.effect.name = %@",
       theEffectName];
如果所有反向关系都为一,则省略“ANY”。如果不止一个 相反的关系对很多人来说是复杂的,你需要 使用“子查询”的谓词

根据更新的问题进行更新:“ANY”不适用于多个 嵌套到多个关系,您需要一个“子查询”:

关于获取“不同的”对象:获取请求总是返回不同的托管对象 对象,它将不会两次返回同一对象。-如果您需要具有 如果某些或所有属性的值不同,则必须设置获取请求
resultType
to
NSDictionaryResultType
returnsDistinctResults
to
YES

顺便说一句,核心数据没有“独特的”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];