核心数据:NSFetchRequest按多对多关系排序

Ben*_*ves 6 core-data objective-c

假设我有一个父实体,每个实体都有许多子节点.我想让所有的父母按孩子的数量排序.类似于以下伪代码的东西:

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:managedObjectContext];

[[NSSortDescriptor alloc] initWithKey:@"children.count" ascending:NO];
//Execute request
Run Code Online (Sandbox Code Playgroud)

有没有办法使用核心数据构建这样的提取?如果没有办法做到这一点,将使用sortedArrayUsingSelector:_PFBatchFaultingArray批量大小的好处进行排序?

谢谢,本

Tim*_*Tim 5

您的查询将起作用,但(假设children出现故障)将在children属性上使用键值编码方法,这反过来会触发错误(请参阅NSManagedObject文档以获取触发错误的方法列表,并讨论此行为) ,因此您将失去批处理和故障的性能优势.

您可以考虑在父实体(称为childrenCount)上维护派生属性,该属性反映与父项相关的子项数(如果这对您的情况可行).这不是最干净的解决方案,但是如果你将它作为NSNumber保留在父实体中,即使children出现故障也可以访问它,你可以直接对它进行排序.

  • 事情发生了变化吗?iOS 7会抛出此类排序的异常:***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'此处不允许使用多对键'***首先抛出调用堆栈: (3认同)
  • 也试过了.这是另一个,除了:***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:'包含KVC聚合的Keepath,其中不应该有一个' (3认同)