iOS6不支持使用自定义块排序描述符,因此我需要找到另一种方法:
学生实体可以属于两个集合之一:confirmedClasses
或pendingClasses
。我想用以下谓词来获取学生:
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"ANY confirmedClasses.classId== %@
OR ANY pendingClasses.classId == %@", currentClass.classId, currentClass.classId]];
因此,用户既可以是班级中的确认学生,也可以是待学生。我想要的是对结果进行排序,以便首先列出所有确认的学生,并在所有确认的学生之后列出待定学生。
知道我怎么能做到这一点吗?
答案 0 :(得分: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];
答案 1 :(得分:0)
为什么不做两次单独的取件?这样你就可以将所有确认的学生放在一个阵列中,将所有待定的学生放在另一个阵列中。按照你想要的顺序安排这两个组要比检索它们更容易,然后根据状态对它们进行排序。