实现NSFetchedResultsSectionInfo

时间:2012-12-13 13:09:12

标签: iphone objective-c ios core-data nsfetchedresultscontroller

我有相当多的数据,我想分区到自定义部分,基于某些keypath的部分和其他一些条件的其他部分。所以我提出了将NSFetchedResultsController子类化的想法。 NSFetchedResultsController的这个子类应该提供返回方法-(NSArray*)sections中返回id<NSFetchedResultsSectionInfo>数组的部分的灵活性。如果我可以通过符合协议的自己的类实现,然后在fetchedResultsController的section方法中传递对象的自定义数组,我想我可以完成我的任务。

有没有办法在你自己的类中实现NSFetchedResultsSectionInfo,然后在fetchedResultsController子类中返回这个对象的自定义数组?或者是否有一些图书馆可以实现这一目标?

修改

让我描述一下我想要实现的目标。我将Contacts模型作为NSManagedObject子类。此实体具有一个名为state的属性,该属性可以是未知的,已知的和未识别的。现在,我希望这些联系人的分段方式使得所有未知联系人都出现在一个部分中,同时未知联系人应该在另一个不同的部分。现在,所有其他已知联系人应根据联系人的姓名位于不同的部分。怎么办呢?

我的表格视图应填充为;

Unknown Contacts (sorted into a single section according to date )
  - 
  -
Known Contacts(A)(known contacts sorted into different sections according to the name)
  -
  -
Known Contacts(B)
  -
  -
  -
Known Contacts(C)
  -
  -
  -
  -
  -
  -
Known Contacts(Z)
 -
UnIdentified Contacts(sorted into a single section with first name)
  -
  -
  -

1 个答案:

答案 0 :(得分:1)

NSFetchedResultsController已经实现了这一点。

NSArray* sectionsArray = self.fetchedResultsController.sections;

要实现特殊部分,请遵循Apple示例代码DateSectionTitles中的原则。模式如下:

  • 创建新的瞬态属性sectionIdentifier。与示例代码中一样,还在托管对象子类中包含primitiveSectionIdentifier属性。这是您在FRC中用于sectionNameKeyPath的属性。

  • 设计一个正确排序的方案。将所有排序和计算逻辑放入类实现文件的sectionIdentifier自定义getter中。例如,你可以简单地使用两个字符,它们在大写字母“A”之前排序,这可能是你常规节标题中的第一个。您也可以将其设为数字​​,例如前两个部分为1和2,字母表中的第一个字母为3 +。

  • titleForHeaderInSection中解码您的方案以显示所需内容。

我最近为一个客户做了这件事,该客户对大量联系人列表有一个非标准的编码方案,表明了一些营销细分。部分标识符的数据也来自几个不同的属性。