核心数据获取和排序为零值

时间:2013-11-02 10:41:07

标签: core-data nsfetchedresultscontroller

我在使用Core Data时遇到了问题。

在我的核心数据模型中,我有Grove个实体和Tree个实体,GroveTree之间存在一对多的关系,以及一对一的关系在TreeGrove之间 (每棵树最多可能在一个树丛中。)

但有些Tree可能是“狂野的”而不属于任何Grove

我正在尝试使用fetResultController在表视图中显示所有树。 每个Grove都是表格视图的一部分,“野生”树必须在一个单独的部分中。

我的代码是这样的:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Tree" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sectionSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Grove.name" ascending:YES];
    NSSortDescriptor *rowSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"type" ascending:YES];
    NSArray *sortDescriptors = @[sectionSortDescriptor, rowSortDescriptor];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"Grove.name" cacheName:nil];

正如你所看到的,我正在取出所有树木。 用于确定节的第一个排序描述符基于从树到树丛的一对一关系,并查找树丛名称。 第二个排序描述符用于对给定部分内的树进行排序,并按类型对它们进行排序。

当树木定义了树丛时,此代码非常正常。 但是这个请求没有获取grove = nil的树。 你知道一种实现通缉行为的方法吗? 我是否必须为野生树木创造一个假树林?

1 个答案:

答案 0 :(得分:0)

我建议您按照建议制作一个代表“无”的特殊Grove实例。

Anther解决方案是获取树丛并操纵表视图数据源方法,如下所示:

  • 将结果数+1作为节数返回。例如。野生树木的最后一节。
  • 根据返回的树丛实体配置节头。
  • 将theGrove.trees.count作为节中的行数返回,为最后一节的其他树进行特殊提取。
  • 等。

你得到了要点。它有点复杂,非标准使用获取的结果控制器,但我认为它之前工作得很好。