返回 Core Data 可转换字符串数组上的匹配项的 Swift 谓词

the*_*ncs 4 core-data nspredicate swift

我有一个 Core Data 实体,它有一个名为likedMoviesString array 的属性[String]。这被配置为可转换属性。

我在此属性内填充 ID 列表,例如:

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

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

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

预先感谢您的帮助。

在此输入图像描述

pba*_*sdf 8

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

fetchRequest.predicate = NSPredicate(format: "%@ IN %K", "558", "likedMovies")
Run Code Online (Sandbox Code Playgroud)

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