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

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"]

我想过滤结果以仅接收喜欢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"]

【问题讨论】:

How to use the "ALL" aggregate operation in a NSPredicate to filter a CoreData-based collection的可能重复 【参考方案1】:

首先,您需要与具有String 属性nameFruit 实体建立适当的多对多关系。

那么你可以这样写一个谓词:

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

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

【讨论】:

以上是关于按值数组过滤核心数据数组字段的主要内容,如果未能解决你的问题,请参考以下文章

核心数据 - 使用数组的确切元素获取对象过滤数据

在数组控制器上使用谓词过滤相关对象

将核心数据过滤/排序到数组中

多个字段的数组过滤

iOS 简单数组谓词

在 swift 中使用 tableview 和数组过滤器自动完成文本字段