按值数组过滤核心数据数组字段

时间:2016-11-06 19:47:17

标签: swift core-data nspredicate

我有核心数据模型:

class Person: NSObject {
   var personName: String?
   var fruits: [String]?
}

JSON格式有两个记录样本:

第1人:

{
  "name" : "John",
  "fruits" : ["banana", "apple", "peach", "orange"]
}

第2人:

{
  "name" : "Alice",
  "fruits" : ["cherry", "mango", "pear", "strawberry"]
}

我想过滤结果,只接收喜欢cherrymango的人。 我有

var fruitFilter: [String] = ["cherry", "mango"]

如何使用NSPredicate来获取已过滤的实体?

var persons: [Person] = []

func fetchPersonWhoLike() {
  let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
  request.predicate = NSPredicate(format: "?????????", fruitFilter)
  ...
}

结果我应该收到persons等于["Alice"]

1 个答案:

答案 0 :(得分:0)

首先,您需要与Fruit实体建立正确的多对多关系,例如String属性name

然后你可以编写一个这样的谓词:

let soughtFruits = ["cherry", "mango"]
request.predicate = NSPredicate(format: 
    "SUBQUERY(fruits, $f, $f.name IN $@).@count = %d", soughtFruits, soughtFruits.count)

这只有在没有重复的情况下才有效。