0

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

在我的核心数据模型中,我有GroveEntity 和Entity,在andTree之间具有一对多的关系,在Groveand之间Tree具有一对一的关系 (每棵树可能在一个最大的树林中)。TreeGrove

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

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

我的代码是这样的:

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 的树。你知道实现想要的行为的方法吗?我必须为野树创造一个假树林吗?

4

1 回答 1

0

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

另一种解决方案是获取树丛并操作您的表视图数据源方法,如下所示:

  • 返回结果数 +1 作为节数。例如野生树木的最后一部分。
  • 根据返回的grove实体配置section header。
  • 返回 theGrove.trees.count 作为节中的行数,对最后一节的其他树进行特殊提取。
  • ETC..

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

于 2013-11-02T16:12:46.883 回答