Swift CoreData 将谓词与数组一起使用
Swift CoreData using predicates with Array
我需要在 CoreData 中保留字符串数组,然后使用谓词为该数组过滤数据。
根据此 post 字段类型 Transformable(使用自定义 class [String])可以解决问题,我可以正确保存字符串数组:
但是,我不能对这个字段使用谓词。具体来说,我的目标是找到所有项目,其中保存的数组中至少有一项与模式匹配。
所以,回到问题:有没有一种在 CoreData 中存储数组的好方法,以便我以后可以为它应用谓词?
为 CoreData
找到了合适的解决方案
不要将数组作为 Transformable
字段放入 Entity
- 使用单个字段创建单独的
Entity
,使用该实体代替 array
。
- 在主
Entity
和数组替换 Entity
之间创建关系。
- 在运行时:使用谓词查找数组
Entity
的 CoreObject
:
NSPredicate(
format: "%K = %@", #keyPath(YourArrayEntity.onlyField),
matchingString
)
- 使用谓词搜索主要实体
NSPredicate(
format: "ANY %K == %@",
#keyPath(YourMainEntity.relationToArrayEntity),
arrayEntityFoundInPreviousStep
)
我需要在 CoreData 中保留字符串数组,然后使用谓词为该数组过滤数据。
根据此 post 字段类型 Transformable(使用自定义 class [String])可以解决问题,我可以正确保存字符串数组:
但是,我不能对这个字段使用谓词。具体来说,我的目标是找到所有项目,其中保存的数组中至少有一项与模式匹配。
所以,回到问题:有没有一种在 CoreData 中存储数组的好方法,以便我以后可以为它应用谓词?
为 CoreData
不要将数组作为 Transformable
字段放入 Entity
- 使用单个字段创建单独的
Entity
,使用该实体代替array
。 - 在主
Entity
和数组替换Entity
之间创建关系。 - 在运行时:使用谓词查找数组
Entity
的CoreObject
:
NSPredicate(
format: "%K = %@", #keyPath(YourArrayEntity.onlyField),
matchingString
)
- 使用谓词搜索主要实体
NSPredicate(
format: "ANY %K == %@",
#keyPath(YourMainEntity.relationToArrayEntity),
arrayEntityFoundInPreviousStep
)