使用 NSPredicate 来判断 NSSet 是不是包含来自另一个 NSSet 的对象 [重复]

Posted

技术标签:

【中文标题】使用 NSPredicate 来判断 NSSet 是不是包含来自另一个 NSSet 的对象 [重复]【英文标题】:Using an NSPredicate to tell if an NSSet contains objects from another NSSet [duplicate]使用 NSPredicate 来判断 NSSet 是否包含来自另一个 NSSet 的对象 [重复] 【发布时间】:2014-01-15 23:51:35 【问题描述】:

我有一个核心数据对象,其中有一个核心数据对象的 NSOrderedSet,称为 hierarchyItems。我想创建一个获取请求,该请求将检查 hierarchyItems 集是否包含一个对象,该对象也在另一个核心数据对象的 NSMutableSet 中。我想创建一个与

具有相同功能的 NSPredicate 或 NSExpression
[obj.hierarchyItems intersectsSet: setOfItems];

【问题讨论】:

对我来说它看起来不像是重复的。这个问题是关于集合交集的,实际上比集合相等更容易测试。 @MartinR:集合相等性测试非常简单地从集合交集派生 @njzk2:我不太明白你的意思。问题是关于核心数据谓词(只有一组有限的可用运算符)。正如您从“可能重复”的答案中看到的那样,找到与给定集合的关系等于的所有对象比该问题的解决方案更复杂。 【参考方案1】:

获取hierarchyItems与其有非空交集的对象 setOfItems,使用带有谓词的获取请求

[NSPredicate predicateWithFormat:@"ANY hierarchyItems IN %@", setOfItems]

【讨论】:

遗憾的是,这不起作用。我试过这个没有用。 @user3200440:嗯,我已经测试过了,它对我有用。 - 你能提供更多信息吗?实体是如何定义的、关系等。您是否收到错误消息、没有结果、错误结果...? 我同意这应该可以完美地工作,但我不知道为什么不能。没有错误消息,我只是得到一个空数组。在你问是之前,这两个集合之间有重叠的对象。 @user3200440:只是为了定位问题:如果您获取所有对象(没有任何谓词)然后使用上述谓词过滤获取的数组,它是否有效?

以上是关于使用 NSPredicate 来判断 NSSet 是不是包含来自另一个 NSSet 的对象 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 通过 NSSet 搜索

NSPredicate 按属性过滤核心数据关系 NSSet

NSPredicate 和 NSManagedObjects 的 NSSet

具有多个 NSSet 的 CoreData NSPredicate

NSPredicate 搜索 NSSet

使用 NSPredicate 根据数组属性过滤 CoreData 项列表