核心数据有序加入表效率

时间:2010-02-03 22:00:32

标签: iphone objective-c core-data performance

我的应用程序中有一个复杂的核心数据映射,在此图像中简化为此问题的相关内容:

alt text http://grab.by/2aLT

我的问题是如何有效地排序Foo。让我们说在我的一个观点中,我有一个分段表,其中包含每个foo。这些部分是类别。 foo的每个部分(在一个类别中)都有一个排序。

现在,我正在使用此算法获取它们:

  1. 获取所有类别的列表,按名称排序
  2. 对于每个类别,获取按索引升序排序的排序Foos
  3. 对于每个SortedFoo,获取关联的Foo,坚持数组
  4. 获取Foos,现在按数组中的索引排序,并将此数组添加到2D数组
  5. 将2D数组作为每个按字母顺序排列的类别中的有序foo返回。
  6. 这对我来说似乎太低效了。当然,必须有一种更好的方法来进行这种常见类型的提取。任何人都可以建议一种新方法吗?

1 个答案:

答案 0 :(得分:2)

我会使foo排序索引在各个类别中通用。然后,获取按索引排序的所有Foo对象。

如果您使用的是获取的结果控制器,则可以使用类别名称作为部分名称键路径。如果没有,您可以手动按类别名称对它们进行分区。

<强>更新
实际上,保持索引的方式,您可以获取所有Foo对象,然后按类别排序,然后按SortFoos索引排序。您仍然需要手动按类别名称对它们进行分区。

更新2
例如:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sorted_positions.category.name" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"sorted_positions.index" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, sortDescriptor2, nil];
[fetchRequest setSortDescriptors:sortDescriptors];