TableView中使用Core Data的部分

时间:2011-07-26 12:19:07

标签: iphone cocoa-touch core-data

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

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

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

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

1)我还可以使用fetchedResultsController吗?或者我需要创建3个不同的数组?

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

修改

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

编辑2:

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

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

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

如果要自定义节和索引标题的创建,还需要查看子类化NSFetchedResultsController。全部都在docs

第3部分)有几种方法

  1. 按展示顺序让您的班级返回姓名,例如@“1)过去”@“2)出现”@“3)未来”然后覆盖控制器:sectionIndexTitleForSectionName:剥离1)2)等。
  2. 无需使用默认的部分排序,您可以进行查找,以便在表格要求第1部分时返回第2部分的结果等。
  3. 1可能看起来有点笨拙,但可能是我先尝试的。