core-data - 核心数据获取属性和 NSFetchedResultsController

标签 core-data nsfetchedresultscontroller fetched-property

我在核心数据编程指南中读到了这一点:

In many cases, your initial fetch retrieves a starting node in the object graph and thereafter you do not execute fetch requests, you simply follow relationships.

如果一切都链接到一个对象,这是有道理的。

但是,假设我有这个对象模型和关系

公司(一对多)团队(一对多)员工(一对一)角色

假设我在开始时通过获取请求加载我的公司。然后,我可以访问一组团队,并且在每个团队中我有一组员工。

(这都是假设,但我的应用程序遵循相同的模型)

我想加载一个 UITableView,其中列出了具有“开发人员”角色的所有员工,并且我想使用 NSFetchedResultsController 来执行此操作。

我想在 Company 上创建一个返回所有“开发人员”的获取属性。这很容易。

如何将此获取的属性链接到 NSFetchedResultsController ?

最佳答案

文档所讨论的是,您使用 fetch 根据某些属性查找一组托管对象,然后通过遍历关系找到所有相关对象。这与在关系数据库中查找数据的方式有很大不同。由于在构建对象图时关系是硬编码的,因此与获取相比,遍历它们非常非常快,并且您可以对任意关系进行建模。

您很少(如果有的话)使用获取的属性来查找您可以步行到达的托管对象。获取的属性用于查找您无法访问的对象,例如存储在另一个持久存储文件中的对象。

要遍历关系,您可以使用键路径。例如。要在模型中查找特定公司的所有员工,您可以使用关键路径 teams.employees您将从特定的公司对象开始。要寻找开发人员,您可以访问 Role包含 developer 的属性值,例如:team.employees.role.roleType

在您的特定情况下,如果您想要一个包含所有开发人员的表,则不会将提取设置为 Company实体但到Employee实体。您可以使用带有键路径的谓词,例如role.roleType== developer 。如果您想要某个公司的所有开发人员,您可以使用如下谓词:“role.roleType==开发人员AND team.company.name == aCompanyName”。

但是,像这样调整模型会更好:

Company<-->>Team<-->>Employee<<-->Role

现在你有一个Role可以将相同角色分配给许多员工的实体。现在您可以在 Role 上获取具有简单键路径 roleType== developer 的实体然后你会得到一件元素。行走employees Role的关系会给你所有的开发人员员工。

对于核心数据,需要记住的重要一点是,实体及其关系旨在模拟您的应用程序处理的现实世界对象、事件和条件。您应该设置数据模型以尽可能接近地表示那些现实世界的事物以及它们之间的关系。例如。在现实世界中,developer只是一种角色,因此它应该仅由对象图中的一个对象表示。在现实世界中,许多员工都可以担任开发人员的角色,因此Employees之间的关系和Roles应该是Employee<<-->Role .

您的模型越接近现实,您的应用程序在各方面就越容易编写。

关于core-data - 核心数据获取属性和 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7093544/

相关文章:

cocoa-touch - 平均作为获取的属性?

ios - 违反 Core Data 的线程合约EXC_BREAKPOINT(代码=1,子代码=0x1f0ad1c8c)

ios - 核心数据对象的顺序改变,核心数据合并后上下文之间不同

windows-phone-7 - Core Data 相当于 Windows Phone

ios - 离开 View 并返回后,FetchedResult View 不会更新

ios - NSFetchedresultscontroller 与 tableview 插入新部分崩溃

ios - UITableView 无法正确地为在屏幕外重新排序的单元格设置动画

ios - 如何将所有相关的自相关对象放在带有每个关系映射的关联节标题的表格 View 中?

cocoa - 在 XCode 数据模型编辑器中获取属性的最小值