我面临一个使用核心数据的问题。
在我的核心数据模型中,我有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的树不会被这个请求所获取。你知道如何实现通缉的行为吗?我必须为野生树木创造一个假树林吗?
发布于 2013-11-02 16:12:46
我建议创建一个表示“无”的特殊Grove实例,正如您所建议的那样。
另一种解决方案是从表视图数据源方法中获取这些数据并操作它们,如下所示:
你明白要点了。它稍微复杂一些,而且非标准地使用了获取的结果控制器,但是我以前已经很好地使用了它。
https://stackoverflow.com/questions/19741072
复制相似问题