按值数组过滤核心数据数组字段
Posted
技术标签:
【中文标题】按值数组过滤核心数据数组字段【英文标题】:Filter core data array field by array of values 【发布时间】:2016-11-06 19:47:16 【问题描述】:我有核心数据模型:
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"]
。
【问题讨论】:
How to use the "ALL" aggregate operation in a NSPredicate to filter a CoreData-based collection的可能重复 【参考方案1】:首先,您需要与具有String
属性name
的Fruit
实体建立适当的多对多关系。
那么你可以这样写一个谓词:
let soughtFruits = ["cherry", "mango"]
request.predicate = NSPredicate(format:
"SUBQUERY(fruits, $f, $f.name IN $@).@count = %d", soughtFruits, soughtFruits.count)
这只有在没有重复的情况下才有效。
【讨论】:
以上是关于按值数组过滤核心数据数组字段的主要内容,如果未能解决你的问题,请参考以下文章