0

iOS6 不支持带有自定义块的排序描述符,所以我需要想出另一种方法来做到这一点:

Student 实体可以属于以下两个集合之一:confirmedClassespendingClasses。我想用以下谓词获取学生:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY confirmedClasses.classId== %@
    OR ANY pendingClasses.classId == %@", currentClass.classId, currentClass.classId]];

因此,用户可以是班级中已确认的学生,也可以是待定学生。我想要的是对结果进行排序,以便首先列出所有已确认的学生,并在所有已确认的学生之后列出待处理的学生。

知道我怎么能做到这一点吗?

4

2 回答 2

0

我只使用两个谓词,复合用于获取,并用于过滤结果:

NSPredicate *confirmed = [NSPredicate predicateWithFormat:@"ANY confirmedClasses.classId== %@,currentClass.classId];

NSPredicate *pending = [NSPredicate predicateWithFormat:@"ANY pendingClasses.classId== %@,currentClass.classId];

NSArray *predicates = [NSArray arrayWithObjects:confirmed,pending,nil];

[fetchRequest setPredicate:[NSCompoundPredicate orPredicateWithSubpredicates:predicates]];

//Perform fetch into an array called 'results'

NSArray *filteredConfirmed = [results filteredArrayUsingPredicate:confirmed];
NSArray *filteredPending = [results filteredArrayUsingPredicate:pending];

NSArray *sortedResult = [filteredConfirmed arrayByAddingObjectsFromArray:filteredPending];
于 2012-10-18T14:07:33.497 回答
0

为什么不只进行两次单独的提取?这样一来,您将把所有已确认的学生放在一个数组中,将所有待处理的学生放在另一个数组中。按您想要的顺序连接两个组比全部检索它们然后根据状态对它们进行排序更容易。

于 2012-10-18T14:10:09.167 回答