【问题标题】:TableView, displaying records from core data NSSet in correct orderTableView,以正确的顺序显示来自核心数据 NSSet 的记录
【发布时间】: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 的更改。棘手,但从长远来看可能会有所回报。

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

【问题讨论】:

    标签: uitableview sorting core-data nsset


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2015-12-24
        • 1970-01-01
        • 2014-05-19
        • 1970-01-01
        • 1970-01-01
        • 2013-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多