根据NSFetchedResultsController属于哪个关系对其进行排序

时间:2012-10-17 15:35:24

标签: objective-c ios core-data nssortdescriptor

iOS6不支持使用自定义块排序描述符,因此我需要找到另一种方法:

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

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

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

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

2 个答案:

答案 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)

为什么不做两次单独的取件?这样你就可以将所有确认的学生放在一个阵列中,将所有待定的学生放在另一个阵列中。按照你想要的顺序安排这两个组要比检索它们更容易,然后根据状态对它们进行排序。