11

设置:

我有一个与 B 有一对多关系的核心数据对象 A。将关系称为“项目”。因此,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。有趣,但没有帮助。

那么过滤与集合的关系的正确方法是什么?

4

2 回答 2

20

以下谓词可以工作:

[NSPredicate predicateWithFormat:@"(items.@count == %d) AND (SUBQUERY(items, $x, $x IN %@).@count == %d)",
                      itemSet.count, itemSet, itemSet.count];

谓词首先检查项目数是否等于给定的大小itemSet,然后检查作为成员的项目数itemSet是否也等于 的大小itemSet。如果两者都为真,则items必须等于itemSet

于 2012-10-26T11:46:44.353 回答
0

你有没有尝试过:

NSPredicate *predicate = [NSPredicate predicateWithFormate:@"items == %@", itemSet];

或者,使用更简单的谓词提取一个子集,并在获取请求之外过滤它们。IE

  1. 将关系中项目数的谓词设置为与比较集中的项目数相同。
  2. 获取结果
  3. 过滤这些结果以仅显示集合包含相同项目的结果。
于 2012-10-26T10:27:22.837 回答