Swift CoreData 将谓词与数组一起使用

Swift CoreData using predicates with Array

我需要在 CoreData 中保留字符串数组,然后使用谓词为该数组过滤数据。

根据此 post 字段类型 Transformable(使用自定义 class [String])可以解决问题,我可以正确保存字符串数组:

但是,我不能对这个字段使用谓词。具体来说,我的目标是找到所有项目,其中保存的数组中至少有一项与模式匹配。

所以,回到问题:有没有一种在 CoreData 中存储数组的好方法,以便我以后可以为它应用谓词?

CoreData

找到了合适的解决方案

不要将数组作为 Transformable 字段放入 Entity

  1. 使用单个字段创建单独的 Entity,使用该实体代替 array
  2. 在主 Entity 和数组替换 Entity 之间创建关系。
  3. 在运行时:使用谓词查找数组 EntityCoreObject
NSPredicate(
    format: "%K = %@", #keyPath(YourArrayEntity.onlyField),
    matchingString
)
  1. 使用谓词搜索主要实体
NSPredicate(
    format: "ANY %K == %@",
    #keyPath(YourMainEntity.relationToArrayEntity), 
    arrayEntityFoundInPreviousStep
)