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 的记录的主要内容,如果未能解决你的问题,请参考以下文章