【问题标题】:Sections on TableView using CoreDataTableView 中的部分使用 Core Data
【发布时间】:2011-10-13 09:06:46
【问题描述】:

使用 Core Data,我的 fetchedResultsController 带有一个日期字段。

我想根据日期显示两个部分:如果是未来的日期,我想在活动部分显示,否则在非活动部分显示。

除了我想在两个部分之间显示一个“草稿部分”。

同样重要的是要提到在每个部分中,我希望它们按日期排序。

1) 我还能使用 fetchedResultsController 吗?还是我需要创建 3 个不同的数组?

2) sectionNameKeyPath 上使用的字段是否必须是字符串?

编辑:

3) 我可以设置部分的顺序而不是按字母顺序吗?

编辑 2:

for 3) 部分不按字母顺序排列。如果这些部分与我设置为我的 fetchRequest 的 NSSortDescriptor 没有任何关系,如何修复它们的顺序? 提前致谢。

【问题讨论】:

    标签: iphone cocoa-touch core-data


    【解决方案1】:

    如果您为 NSManagedObjects 使用自定义对象,那么您真正需要做的就是定义一个方法,该方法返回它应该在哪个部分。不确定您所说的草稿部分是什么意思,但只要 NSManagedObject 子类有一个方法生成“草稿”,那么你应该没问题。

    要在一个部分中按日期排序,只需将排序描述符添加到获取请求中。就这么简单。

    我在我的一个应用程序中做了类似的事情,所以如果您有任何其他问题,请尽管提问。

    如果您想自定义部分和索引标题的创建,您还想查看 NSFetchedResultsController 的子类化。都在docs

    对于第 3 部分)有几种方法

    1. 让您的类按显示顺序返回名称,例如@"1)Past" @"2)Present" @"3)Future" 然后覆盖控制器:sectionIndexTitleForSectionName: 以剥离 1) 2) 等。
    2. 不需要使用默认的部分排序,您可以进行查找,以便在表格要求第 1 部分时返回第 2 部分的结果等。

    1 可能看起来有点笨拙,但可能是我首先要尝试的。

    【讨论】:

    • 实际上这些部分不是按字母顺序排序的,而是根据您为 fetchRequest 设置的 NSSortDescriptor 排序的。
    【解决方案2】:

    Sections 需要由实体的某些属性定义,其实例出现在 tableview 中。您的标准属性,例如字符串、数字、日期等有一些内置的比较器使这成为可能,例如按字母顺序。比较器使软件可以确定哪个对象属于哪个部分。

    但是,当您要添加高度自定义的部分时,例如根据数据属性是过去还是将来来划分对象,则需要提供自己的比较器。

    在这种情况下,您可能希望在 NSDate 上添加一个类别,该类别返回一个布尔值,无论日期是过去还是未来。像[NSDate isActive] 这样的东西,然后你将获取的结果控制器的sectionNameKeypath 设置为theDateAttribute.isActive。然后,获取的结果控制器将为键返回的每个值创建一个部分,在本例中为两个。

    如果您提供日期键控排序描述符,则所有行都将在其部分内按日期排序。

    【讨论】:

    • 谢谢!在英语中,Active 按字母顺序排在 Non-Active 或 Ended 之前。有没有办法强制我的部分排序。
    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多