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 将成为一个相当笨重的字符串操作过程。另一种选择是用一对多关系替换可转换属性。我推荐最后一个。
我有一个核心数据实体,它有一个名为 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 将成为一个相当笨重的字符串操作过程。另一种选择是用一对多关系替换可转换属性。我推荐最后一个。