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 根本不允许这样做,但希望将其作为参考框架提供给正确答案。
- 你不能简单地匹配数组中的数组,因为你只能匹配数组中的对象。
- 这种情况的解决方案是使用 SUBQUERY。我们将迭代 obja.objectsC 中的所有对象以匹配 objb.objectsC 中的对象。之后,我们计算所有引用并与零进行比较。
[NSPredicate predicateWithFormat:@"SUBQUERY(obja.objectsC, $objA, $objA IN %@).@count > 0", objb.objectsC];
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 根本不允许这样做,但希望将其作为参考框架提供给正确答案。
- 你不能简单地匹配数组中的数组,因为你只能匹配数组中的对象。
- 这种情况的解决方案是使用 SUBQUERY。我们将迭代 obja.objectsC 中的所有对象以匹配 objb.objectsC 中的对象。之后,我们计算所有引用并与零进行比较。
[NSPredicate predicateWithFormat:@"SUBQUERY(obja.objectsC, $objA, $objA IN %@).@count > 0", objb.objectsC];