设定:
我有一个与B具有to-many关系的Core Data对象A.调用关系“items”。因此,a.items返回与A相关的所有B-。
现在,我手动编写了B对象的NSSet“itemSet”。
我想做以下事情:
return all A objects whose "items" relation exactly matches itemSet
如何为此构造谓词?我试过这个:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(ALL items in %@)", itemSet];
但这只是给了我Unsupported predicate (null)
。
此:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(items in %@)", itemSet];
告诉我unimplemented SQL generation for predicate
。有趣,但没有帮助。
那么用集合过滤关系的正确方法是什么?
答案 0 :(得分:20)
以下谓词可以起作用:
[NSPredicate predicateWithFormat:@"(items.@count == %d) AND (SUBQUERY(items, $x, $x IN %@).@count == %d)",
itemSet.count, itemSet, itemSet.count];
谓词首先检查项目数是否等于给定itemSet
的大小,然后检查itemSet
成员的项目数是否也等于itemSet
。如果两者都为真,那么items
必须等于itemSet
。
答案 1 :(得分:0)
你试过了吗?
NSPredicate *predicate = [NSPredicate predicateWithFormate:@"items == %@", itemSet];
或者,使用更简单的谓词拉出子集,并在获取请求之外对其进行过滤。即。