NSPredicate对两个属性进行排序?

时间:2014-09-10 06:38:43

标签: ios objective-c sorting core-data nspredicate

我在Core Data中有一个表格,如:

===============================
student-Id      ||      mark
================================       
      3         ||       20 
      3         ||       10
      3         ||       30
                ||       
      1         ||       30
      1         ||       20
      1         ||       10
                ||      
      2         ||       10
      2         ||       30
      2         ||       20
 ===============================

我可以轻松获取按学生ID排序的结果,但我需要结果显示按升序排列的所有ID和标记,如下所示:

===============================
student-Id      ||      mark
===============================       
      1         ||       10
      1         ||       20
      1         ||       30
                ||      
      2         ||       10
      2         ||       20
      2         ||       30

      3         ||       10 
      3         ||       20
      3         ||       30
 ==============================

如何编写单个谓词以按上述顺序获取结果?

1 个答案:

答案 0 :(得分:2)

我不相信您可以使用谓词在Core Data抓取请求中对结果进行排序。该责任属于您在提取中使用的排序描述符。每个排序描述符 - NSSortDescriptor的一个实例 - 包含一个字符串键和一个顺序;您可以按照提供的顺序指定多个描述符以按几个键排序。

例如,您似乎希望先按student-Id排序结果,然后按mark排序。在这两种情况下,您首先需要最低的数字 - 您将按升序排序。因此,在创建Core Data fetch请求后,您可以将其配置为具有两项sortDescriptors数组:

// Assuming an existing "fetchRequest":
fetchRequest.sortDescriptors = @[
    [NSSortDescriptor sortDescriptorWithKey:@"student-Id" ascending:YES],
    [NSSortDescriptor sortDescriptorWithKey:@"mark" ascending:YES]
];

从那时起,您可以照常继续提取请求。