Swift 谓词 returns 匹配核心数据可转换字符串数组

Swift predicate that returns matches on a Core Data transformable string array

我有一个核心数据实体,它有一个名为 likedMovies 的属性,它是一个字符串数组 [String]。这被配置为可转换属性。

我在此属性中填充了一个 ID 列表,例如:

用户实体:
name = Duncan | likedMovies = [524, 558, 721]
name = Saskia | likedMovies = [143, 558, 653]
name = Marek | likedMovies = [655, 323, 112]

我想编写一个谓词,其中 returns 所有 User 实体,其中 likedMovies 数组包含给定值。我尝试了下面的谓词,但它不起作用 - 对于 id 558,我没有返回任何实体,而不是返回 [Duncan, Saskia]

fetchRequest.predicate = NSPredicate(format: "%@ IN %@", "558", "likedMovies")

提前感谢您的帮助。

有两个问题:第一,你的predicate格式不对。您不能使用 %@ 作为属性名称的占位符;你必须改为使用 %K:

fetchRequest.predicate = NSPredicate(format: "%@ IN %K", "558", "likedMovies")

但第二个问题是可转换属性不能作为提取请求的一部分用于谓词(对于 SQLite 存储)。一种选择是使用谓词过滤内存中的 User 对象(after 获取它们)。另一种选择是将 ID 数组表示为字符串(带有合适的分隔符),而不是字符串数组。然后,您可以使用 CONTAINS 字符串运算符来创建谓词。但是向 likedMovies 添加和删除 ID 将成为一个相当笨重的字符串操作过程。另一种选择是用一对多关系替换可转换属性。我推荐最后一个。