核心数据 NSFetchedResultsController 和排序

Posted

技术标签:

【中文标题】核心数据 NSFetchedResultsController 和排序【英文标题】:Core data NSFetchedResultsController and sorting 【发布时间】:2013-01-16 09:43:14 【问题描述】:

我有两个名为 Assignment 和 Question 的核心数据实体。分配实体具有分配详细信息,例如其名称、ID 等。问题表具有问题名称、ID 等。分配与问题具有一对多关系。当我尝试从服务器获取作业详细信息时,我得到作业和问题数据,并且作业和问题实体都在核心数据存储中更新。请注意,两个不同的作业可能共享相同的问题。

现在让我们考虑一下,作业 1 的问题 ID 为 1,2 和 3。而作业 2 的问题 ID 为 4、5 和 1。在我的问题表中它只有 5 个条目,因为 ID 为 1 的问题很常见在这两个任务中。

我正在使用 NSFetchedResultsController 在 UI 上填充它。我在以添加到核心数据存储(数据库)的相同顺序获取问题时遇到问题

例如:对于作业 2,我需要 oder 4,5 和 1 中的问题。没有唯一的键可以用来创建排序描述符。没有排序描述符我无法创建 NSFetchRequest,没有它是不可能的创建 NSFetchedResultsController。有解决这个问题的想法吗?

【问题讨论】:

【参考方案1】:

在我看来,最好的模式是创建一个新实体AssignmentQuestion,它与Assignment 具有多对一关系,与Question 具有多对一关系,如以及序列号属性。

Assignment <--------->> AssignmentQuestion <<--------> Question
|--name                 |--sequence                   |--text
|--id                                                 |--id
|--etc.                                               |--etc

【讨论】:

感谢您的回复。即使我想到了这个解决方案,如果我使用 sqlite 或任何其他传统数据库,我也必须这样做。但是在核心数据中,我只是想知道,有没有办法创建一个获取控制器来按照添加到数据库中的相同顺序获取数据。 嗯,有,它被称为“有序集”。但在我看来,这让事情变得更加复杂。排序是不透明的,因此很难操作。

以上是关于核心数据 NSFetchedResultsController 和排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按创建 UITableViewCell 时计算的值对 UITableView 进行排序?

启动 Core Data 应用程序时在后台配置 NSFetchedResultsController

大数据核心技术都有哪些

哪里不使用核心数据?是不是可以将核心数据用作 MySql 之类的数据库?

使用 MKMapView、核心位置和核心数据

大数据三大核心技术:拿数据、算数据、卖数据!