CoreData按表达式排序或选择列作为表达式

时间:2012-12-27 17:42:18

标签: ios core-data

我有一个带有sqlite后端的coreData,其中包含两个NSDate列:eventStart和eventEnd。我想对它进行相当复杂的选择和排序。

对于应用程序中的一个主要显示器,我想检索两件事:

  1. 持续时间(eventEnd - eventStart)小于指定值的10个事件
  2. 持续时间大于指定值的10个事件
  3. 必须根据与指定值的距离
  4. 正确排序事件

    我立即遇到的两个问题是我无法找到一种方法从表达式中选择一列(日期计算)。第二个是NSSortDescriptor似乎只适用于列,而不是表达式。这与SQLite的工作方式相反,我想知道是否更容易打破原始SQL。

    我应该提一下,我将要处理的数据太大而无法放入内存中进行排序,尤其是因为排序是在表达式上,查询必须返回所有数据以进行排序。

2 个答案:

答案 0 :(得分:1)

如果您首先获取对象,则应该能够使用所需的任何键对结果进行排序,包括返回您提到的间隔的方法。因此,您将使用返回此时间间隔的方法名称创建NSSortDescriptor,使用它创建一个新数组,然后只需调用

[originalFetchedArray sortedArrayUsingDescriptors:sortDescriptors];

将返回一个新的排序数组。如果您从NSMutableArray开始,可以使用类似的方法对其进行排序。

答案 1 :(得分:0)

当我遇到一个非常类似的问题时,我刚刚为计算出的值创建了一个新列(在你的情况下,它将是持续时间)。之后,检索变得微不足道。