使用 nil 值获取和排序核心数据
Posted
技术标签:
【中文标题】使用 nil 值获取和排序核心数据【英文标题】:core data fetching and sorting with nil value 【发布时间】:2013-11-02 10:41:07 【问题描述】:我在使用 Core Data 时遇到了问题。
在我的核心数据模型中,我有Grove
Entity 和Tree
Entity,Grove
和Tree
之间存在一对多关系,Tree
和Grove
之间存在一对一关系
(每棵树最多可以在一个树林中)。
但有些Tree
可能是“狂野的”,而不是任何Grove
的一部分。
我正在尝试使用 fetResultController 在表格视图中显示我的所有树。 每个 Grove 都是 table view 的一个部分,而“野生”树必须在一个单独的部分中。
我的代码是这样的:
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】:我建议按照您的建议创建一个表示“无”的特殊 Grove
实例。
另一个解决方案是获取 groves 并按如下方式操作表视图数据源方法:
返回结果数 +1 作为节数。例如。野生树木的最后一部分。 根据返回的grove实体配置section header。 返回 theGrove.trees.count 作为节中的行数,对最后一节的其他树进行特殊提取。 等等..你明白了要点。使用 fetched results 控制器有点复杂,而且非标准使用,但我之前发现它工作得很好。
【讨论】:
我选择了“NONE” Grove 的简单解决方案以上是关于使用 nil 值获取和排序核心数据的主要内容,如果未能解决你的问题,请参考以下文章
nsfetchedresultscontroller 中部分名称键路径的 Nil 关系值