0

カスタムブロックを使用した並べ替え記述子はiOS6ではサポートされていないため、これを行う別の方法を理解する必要があります。

Studentエンティティは、次の2つのセットのいずれかに属することができます:confirmedClassesまたはpendingClasses。次の述語で学生を取得したい:

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

したがって、ユーザーはクラスで確認済みの学生または保留中の学生のいずれかになります。結果を並べ替えて、確認済みのすべての学生が最初にリストされ、保留中の学生がすべての確認済みの学生の後にリストされるようにします。

どうすればこれを達成できるでしょうか?

4

2 に答える 2

0

フェッチ用の複合語と結果のフィルタリングに使用する2つの述語を使用します。

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

2つの別々のフェッチを実行しないのはなぜですか?そうすれば、確認済みのすべての学生を1つの配列に、保留中のすべての学生を別の配列に配置できます。2つのグループをすべて取得してからステータスに従って並べ替えるよりも、必要な順序で2つのグループを分類する方が簡単です。

于 2012-10-18T14:10:09.167 に答える