我在使用Core Data时遇到了问题。
在我的核心数据模型中,我有Grove
个实体和Tree
个实体,Grove
和Tree
之间存在一对多的关系,以及一对一的关系在Tree
和Grove
之间
(每棵树最多可能在一个树丛中。)
但有些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的树。 你知道一种实现通缉行为的方法吗? 我是否必须为野生树木创造一个假树林?
答案 0 :(得分:0)
我建议您按照建议制作一个代表“无”的特殊Grove
实例。
Anther解决方案是获取树丛并操纵表视图数据源方法,如下所示:
你得到了要点。它有点复杂,非标准使用获取的结果控制器,但我认为它之前工作得很好。