TableView,以正确的顺序显示来自核心数据 NSSet 的记录

Posted

技术标签:

【中文标题】TableView,以正确的顺序显示来自核心数据 NSSet 的记录【英文标题】:TableView, displaying records from core data NSSet in correct order 【发布时间】:2011-01-10 05:54:30 【问题描述】:

我已经对此进行了一段时间的研究,我认为有很多解决方案,但我不确定它们是否那么好。可能是我错过了什么:-)

我有两张桌子。对于 TableA 中的每条记录,TableB 中都有多条记录。 IE。一对多的关系。我已经将它映射到核心数据中并生成了类。到目前为止一切顺利。

我的基于表格视图的 UI 需要如下所示:

Section 1
Cell 1: Table A: field1
Cell 2: Table A: field2
-----
Section 2
Cell 1: Table B: record 1: field1
Cell 2: Table B: record 2: field1
....

当我在我的tableView:cellForRowAtIndexPath: 中时,很容易处理第 1 节单元格,因为它们是来自单个表 A 记录的不同字段。第 2 节单元格不同。每次调用tableView:cellForRowAtIndexPath: 时,我都需要从表A 的NSSet 中获取正确的表B 记录。这就是问题所在。

NSSet doco表示不保证订单。这意味着如果我想要基于索引的特定记录,我有几种可能的技术:

向核心数据查询添加排序描述符,并使用快速枚举获取我想要的记录。我不知道这是否可行,因为我们仍在使用 NSSet。 在获取数据后使用排序描述符对 NSSet 进行排序以生成 NSArray 并将其存储在属性中,然后再开始加载表。 我现在正在考虑第三种选择,即为 NSSet 编写一个装饰器,它的作用类似于 NSArray,并允许我指定一个排序字段并自动跟踪对 NSSet 的更改。棘手,但从长远来看可能会有所回报。

这些答案似乎都不是很好。有一个更好的方法吗?

【问题讨论】:

【参考方案1】:

如果您只想要对象,请使用 NSSet 访问器。

如果您希望对对象进行排序,请设置 NSFetchRequest 并添加适当的 NSSortDescriptors。

然后,只需使用executeFetchRequest:error: 执行提取

更好的是,因为这是专门针对 tableView 的,所以使用 NSFetchedResultsController 来填充 table view。这就是它的用途。

【讨论】:

【参考方案2】:

我最终将 NSArray 存储在控制器中并将 NSSet 记录排序到其中。

【讨论】:

以上是关于TableView,以正确的顺序显示来自核心数据 NSSet 的记录的主要内容,如果未能解决你的问题,请参考以下文章

如何以正确的顺序显示来自 Access 的数据?

向tableview添加行以添加行和核心数据

根据来自服务器和本地的数据集更新 TableView

在 Swift 的表格视图中按字母部分显示来自 JSON 的数据

使用 Swift 3 显示来自核心数据的随机数据

在底部加载最近的消息并放置一个加载旧消息按钮以在 TableView 上加载旧消息