ios - 核心数据如何过滤(NSPredicate)包括关系要求和给定的关系对象?

标签 ios swift core-data relationship nspredicate

<分区>

我将如何过滤(构造一个 NSPredicate)以下内容。

  • 拥有 SCHOOL 和 PERSON 实体
  • 一对多关系,即一个PERSON有一个SCHOOL,SCHOOL有多个PERSON
  • 过滤方法的输入是 (a) 人员姓名(例如,所有人的名字都是“Tom”),以及 (b) 学校本身的托管对象。
  • 为了这个问题的目的,假设学校没有独特的属性

那么我的困惑/观察是:

  • 我已经有了 School 托管对象本身,但是不确定在创建谓词时如何使用它?
  • 但是,如果我创建了 NSPredicate,在任何情况下我如何创建与 SCHOOL 的关系,因为没有 ID(标识符)自己链接它们,因为我让 Core Data 这样做?

首选是 SWIFT(但是,如果有人知道 Objective-C 也可能对我有帮助)。所以我再次尝试做的是:

  • 获取所有 PERSON 对象,其 first name = "xxx",并且它们与以下 SCHOOL 托管对象相关联。

最佳答案

谓词将是您所期望的。

NSPredicate(format: "name = %@ && school = %@", "Tom", school)

但是,您可以通过使用另一个方向的关系和过滤器来找到没有谓词的人。

let tom = school.persons.filter { $0.name == "Tom" }.first

(您可能需要将 NSSet 转换为 Set<Person> )。

关于ios - 核心数据如何过滤(NSPredicate)包括关系要求和给定的关系对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35968378/

相关文章:

ios - 你如何使背景图像快速缩放到屏幕大小?

ios - 将 LinkingObjects 视为列表

ios - UITableView 没有出现在我的 UITableview 的 cell.contentView 中

ios - 在 iOS 的 Scrollview 顶部的 CATiledLayer 中缩放和平移 pdf 绘图后更正触摸位置

Swift Eureka - MultivaluedSection 捕获重新排序操作

iphone - CoreData关系澄清: How to effectively set an inverse relationship

ios - 对作为另一个 NSManagedObject 的属性出现的 NSSet 进行排序的最佳方法是什么

swift - Tableview 自动重新加载内容

ios - 根据第一次或第二次来区分触摸

ios - Core Data+CloudKit 未连接到 CloudKit