文档所讨论的是,您使用 fetch 基于某个属性查找一组托管对象,然后通过遍历关系找到所有相关对象。这与您在关系数据库中查找数据的方式有很大不同。由于在构建对象图时关系是硬编码的,因此与获取相比,遍历它们非常非常快,并且您可以对任意关系进行建模。
您很少(如果有的话)使用获取的属性来查找您可以步行到的托管对象。获取的属性用于查找您无法找到的对象,例如存储在另一个持久存储文件中的对象。
要遍历关系,您可以使用键路径。例如,要在您的模型中查找特定公司的所有员工,您将使用关键路径teams.employees
并从特定公司对象开始。Role
要找到开发人员,您需要找到保存该值的属性的路径developer
,例如:team.employees.role.roleType
。
在您的特定情况下,如果您想要一个包含所有开发人员的表,您不会将获取设置为Company
实体,而是设置为Employee
实体。您将使用带有键路径的谓词,例如role.roleType== developer
。如果您想要某个公司的所有开发人员,您可以使用如下谓词:`role.roleType== developer AND team.company.name == aCompanyName。
但是,像这样调整模型会更好:
Company<-->>Team<-->>Employee<<-->Role
现在您有一个Role
可以将相同角色附加到许多员工的实体。现在,您可以Role
使用简单的 keypath 获取实体,roleType== developer
然后返回一个对象。走的employees
关系Role
会给你所有的开发人员。
使用 Core Data 要记住的重要一点是,实体及其关系旨在模拟您的应用程序处理的真实世界对象、事件和条件。您应该设置数据模型以尽可能接近地表示那些真实世界的事物以及它们之间的关系。例如,在现实世界中,developer
只是一个角色,所以它应该由对象图中的一个对象来表示。在现实世界中,很多员工都可以扮演开发者的角色,所以两者之间的关系Employees
应该Roles
是Employee<<-->Role
。
您的模型越接近现实,您的应用程序就越容易在各个方面编写。