我有核心数据模型:
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"]
}
我想过滤结果,只接收喜欢cherry
和mango
的人。
我有
var fruitFilter: [String] = ["cherry", "mango"]
如何使用NSPredicate来获取已过滤的实体?
var persons: [Person] = []
func fetchPersonWhoLike() {
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
request.predicate = NSPredicate(format: "?????????", fruitFilter)
...
}
结果我应该收到persons
等于["Alice"]
。
答案 0 :(得分:0)
首先,您需要与Fruit
实体建立正确的多对多关系,例如String
属性name
。
然后你可以编写一个这样的谓词:
let soughtFruits = ["cherry", "mango"]
request.predicate = NSPredicate(format:
"SUBQUERY(fruits, $f, $f.name IN $@).@count = %d", soughtFruits, soughtFruits.count)
这只有在没有重复的情况下才有效。