如何创建一个核心数据谓词来测试一个关系包含了所有给定的对象?(How to create a Cor

2019-06-18 15:24发布

建立:

我有一个具有一对多的关系B.调用关系“项目”核心数据对象的。 所以,a.items收益与A相关联的所有烧烤

现在,我具有B-对象的手动组成的NSSet“套装”。

我要做到以下几点:

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 。 有趣的是,但没有帮助。

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

Answer 1:

下面的谓词可以工作:

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

谓词检查该第一项的数量是等于给定的大小itemSet ,然后检查该它们的部件的项目数itemSet也等于的大小itemSet 。 如果两个都是真的,那么items必须等于itemSet



Answer 2:

你有没有尝试过:

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

另外,拉出一个子集,用更简单的谓词和过滤他们获取请求之外。 即

  1. 设置项目数谓语的关系到是相同的比较集中的项目数。
  2. 获取结果
  3. 筛选这些结果表明只有在集包含相同物品的人。


文章来源: How to create a Core Data predicate to test that a relation contains all given objects?