0

当您想做一个分段的表格视图(使用核心数据)时,您必须以某种方式为部分标题提供相应的文本;做到这一点的一种方法是拥有一个包含可以由节索引索引的字符串的数组。

我见过很多场景,构建这样的数组是相当简单的,有时甚至是直截了当的。

但是,如果您想要/需要分成部分的是您的实体实例对象集并且标题包含连接多个属性的值,我还没有找到一种 [有效] 方法来构建字符串的“部分”数组你的对象。

通常,您会将实体对象放在另一个数组中,该数组是同一表格视图的数据源。而且我已经按照我想要的部分的特定标准对该数组进行了排序/分组。

当您的部分与实例中只有一个属性的值一样简单时,您可以简单地过滤对象数组并获取一个属性的所有不同值并使用部分数组中的那些值,您就完成了。

当每个实例对象中的多个属性需要用作节的文本时,通常如何创建节数组。您是否连接了您有兴趣成为节标题一部分的那些值?这就是我正在做的事情,然后过滤包含该连接字符串的数组,但想知道这是否正确,或者是否有另一种“更好”的方式来创建这些部分。

例如,现在我在实例中连接 3 个属性:日期、标题和名称(11/02/2012 GROCERIES Frute)。由于我的实例对象按日期、标题、名称排序,因此某些对象属于同一部分,而其他对象属于另一个部分,依此类推。section 数组应该只有不同的连接字符串,因此我对其进行过滤以消除重复项,最终得到 section 数组。

不过,我觉得应该有更好的方法。

4

1 回答 1

1

当我在一个不可排序的值或结果上构建一个节数组时,或者连接多个值时,我总是创建一个自定义排序值作为第一个排序描述符传递给NSFetchedResultsController.

为了得到 Core Data 生成的正确的“GROUP BY”-SQL 语法,你需要在 SectionNameKeyPath 和第一个 sortdescriptor 中具有相同的属性。

从那里,我覆盖 ,– controller:sectionIndexTitleForSectionName:中的方法NSFetchedResultsControllerDelegate,并连接或返回给定部分的部分标题:

- (NSString*) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{  
  id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
  NSArray *articles = [sectionInfo objects];
  if ([articles count] > 0)
  {
    Article *article = [articles objectAtIndex:0];
    return article.section;
  }
  return [sectionInfo name];
}
于 2012-11-05T18:35:35.820 回答