【发布时间】:2026-01-28 22:25:02
【问题描述】:
我的核心数据模型有一个实体,其属性为 setOfStrings,类型为 Transformable。
对应的类有一个属性@NSManaged var setOfStrings: Set<String>?。
我想使用一个谓词来获取对象,该谓词过滤掉其属性setOfStrings 与给定集合具有集合交集的对象,例如givenSet。
我尝试使用以下谓词:
NSPredicate(format: "ANY setOfStrings IN %@", givenSet)
但它总是计算为false。
如果我注释掉这个谓词,则未过滤的对象将被正确提取。
我阅读了许多与该主题相关的 SO Q/A,例如this one。但是它不起作用。
我知道,如果我的属性setOfStrings 是一个关系,我可以使用子查询来获取正确的对象,如here 所示。但我没有关系,只有一组字符串。
我也读过this post,上面写着
我假设集合被定义为一个可转换的属性,它 表示它以二进制存档的形式存储在 SQLite 文件中。然后 上述查询最多适用于已加载到的对象 托管对象上下文,但不针对存储文件。
这显然与我的问题有关。但在我看来,用一对多关系替换一组简单字符串的建议解决方案似乎太复杂了。
我应该使用哪个谓词?
【问题讨论】:
-
恐怕基于可转换属性的谓词无法作为提取的一部分。您要么必须获取所有内容,然后在内存中过滤结果,要么使用不同类型的属性:一对多关系是最好的,但您可以将字符串连接成单个字符串并将其存储.那么你的谓词可能会与之相反。但这取决于字符串的细节。
-
@pbasdf 应该是一个答案
标签: ios core-data nspredicate nsfetchrequest set-intersection