NSFetchedResultsController 部分按动态条件分组?

Posted

技术标签:

【中文标题】NSFetchedResultsController 部分按动态条件分组?【英文标题】:NSFetchedResultsController section grouping by dynamic condition? 【发布时间】:2012-04-06 04:01:15 【问题描述】:

我在 CoreData 中有 2 个实体(与此相关)。我们称他们为objectAobjectB。每个实体与另一个实体具有一对多关系。

我有一个视图,它使用NSFetchedResultsController 在表中显示所有objectB 对象(记录)的列表。一切正常。

现在,我要做的是,给定任何一个 objectA,提供一个表格,其中包含与objectB >具体的 objectA 在第一部分,其余的在第二部分。根据我的尝试,NSFetchedResultsController 中的 sectionNameKeyPath 似乎不够灵活,无法允许这样的事情。

我是否遗漏了什么,或者有其他方法可以做到这一点吗?

【问题讨论】:

【参考方案1】:

不幸的是,NSFetchedResultsController 似乎不够灵活,因此我最终使用了两个 NSFetchedResultsControllers 来分别获取具有不同谓词的第一和第二部分。

【讨论】:

我认为您正在尝试与 NSFRC 对抗,在具有两个 NSFRC 的表视图中管理两个部分将是错误的,因为它旨在一次使用一个 FRC。【参考方案2】:

我想建议另一种解决方案,

在您的实体(例如 sectionName 或类似)中创建一个属性,该属性将根据您的条件决定,例如。 '一二'。

现在,当您创建 FRC 时,请使其根据“sectionName”(新条目)以升序创建部分。

现在你有两个基于条件的部分。

我就是这样弄的,

在我的核心数据实体子类中创建了一个计算属性,

var groupSectionName:String?
        return isPinned /**Or your condition*/ ? "One" : "Two"
    

在创建 FRC 时,

let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context,    sectionNameKeyPath: "groupSectionName",cacheName: nil)

现在,对于每个索引,FRC 都会调用计算属性。

【讨论】:

以上是关于NSFetchedResultsController 部分按动态条件分组?的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?