【问题标题】:NSFetchedResultsController with multiple section logic具有多节逻辑的 NSFetchedResultsController
【发布时间】:2012-01-23 22:14:54
【问题描述】:

我有一份添加到购物清单的商品清单。每件物品都有一个部门,还有一个标志来表明它是否已被收集。

我很想使用单个表格视图来显示它。问题是,我需要按部门对部分进行分组,然后在底部为收集的项目添加最后一个附加部分(不考虑部门)。

我可以创建一个 fetchedResultsController 过滤掉collected = yes 并轻松地按部门排序。但我需要这个附加部分附加那些收集 = 是的项目。

我是否应该尝试创建一个带有复杂查询的 fetchedResultsController 来执行此操作?或者尝试手动添加一个部分和一些行?如果有,从哪里来?第二个FRC?是否可以将两个 FRC 馈送到一个 tableview 中?

【问题讨论】:

    标签: uitableview core-data nsfetchedresultscontroller


    【解决方案1】:

    本,

    NSFetchedResultsController 旨在提供一次获取来填充表格视图。但是您可以选择如何将该数据输入到表视图中。您可以在任何需要的地方手动翻译获取的项目。您可以添加部分、额外的行等。这就是为什么他们会在委托中显示模型的更新。它们让您有机会进行这些调整。

    因此,如果您构建模型时单次提取就可以完成这项工作,那么您在使用它的方式上会有很大的灵活性。

    安德鲁

    【讨论】:

    • 所以你建议我坚持一个相当简单的谓词并在获取后更改数据?哪里适合做这件事?还是说“单次提取”是指我应该设计一个更复杂的查询来完全按照我的需要检索数据?
    • 本,我没说要更改数据。您可以完全控制如何显示来自控制器的数据。例如,如果您想在表格视图的顶部放置一个搜索框,就像 Apple 的联系人列表一样,那么您需要调整来自控制器的每个项目的行号和节号以考虑到这一点。这很简单。这也是您必须手动将控制器连接到表格视图的原因。要记住的另一件事是控制器有限制。有时正确的答案是自己收听合并通知。安德鲁
    • 对不起,这对我来说毫无意义。我真的无法回应。很明显,我使用单个 fetch 请求并在显示对象之前对其进行了修改,但我仍然不知道如何按两个不同的标准对它们进行分区。
    • Ben,您像往常一样通过告诉表视图您拥有比 FRC 给您的部分多 1 个部分来声明部分。然后,您按照通常的方式填充这些单元格。或者您可以完全放弃 FRC,只自己维护一组嵌套的对象数组。安德鲁
    • 谢谢安德鲁。我试图让我的问题更具体:stackoverflow.com/questions/8997387/…我认为你正在向我发送正确的方向,但也许我只是错过了一小部分。
    【解决方案2】:

    sectionKeypathName 可用,它需要一个参数来决定应该有多少个部分。如果您传递 nil,则只有一个部分,但如果您在 FetcherResultsController 中传递一些 sectionKeypathName 并将第一个 sortDescriptor 设置为与 sectionKeyPathName 相同,您将在 fethedResultsControllerDelegate 中获得不同的部分。 sectionKeypathName 必须是您要获取的实体中的属性。

    let sortDescriptor = NSSortDescriptor(key: "sectionView", ascending: true)
    fetchRequest.sortDescriptors = [sortDescriptor]
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: mainContext, sectionNameKeyPath: "sectionView", cacheName: nil)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      相关资源
      最近更新 更多