NSFetchRequest 和 NSPredicate,数组比较和匹配

NSFetchRequest and NSPredicate, array comparison and matching

Class A 包含与 Class C

的 toMany 关系

Class B 包含与 Class C

的 toMany 关系

我正在寻求设计一个 NSFetchRequest,它基于与 Class C 的关系在 Class A 和 [=35] 的实例之间至少有一个共同对象的概念来查询对象=]乙

我缺乏合适的语言来描述这个概念,但感觉它必须纯粹在 NSPredicates 的某些方案中是可能的

所以如果对象 A (a-0) 与对象 C (c-2, c-4) 相关

对象 B (b-0) 与对象 C (c-0, c-4) 有关

则谓词认为匹配

但是如果对象 B (b-0) 与对象 C (c-0, c-1) 相关

那将不会被视为匹配

我的非工作谓词是这样开始的

[NSPredicate predicateWithFormat:@"obja.objectsC IN %@", objb.objectsC];

CoreData 根本不允许这样做,但希望将其作为参考框架提供给正确答案。

  1. 你不能简单地匹配数组中的数组,因为你只能匹配数组中的对象。
  2. 这种情况的解决方案是使用 SUBQUERY。我们将迭代 obja.objectsC 中的所有对象以匹配 objb.objectsC 中的对象。之后,我们计算所有引用并与零进行比较。

[NSPredicate predicateWithFormat:@"SUBQUERY(obja.objectsC, $objA, $objA IN %@).@count > 0", objb.objectsC];