2

Core Dataを使用して適切な量の情報をキャッシュしており、管理対象オブジェクト間にTo-Many関係を設定しています。当然、私はNSFetchRequestを使用して、その関係の特異な側の配列をフェッチします。ただし、リレーションシップの「多」側を使用してUITableViewにデータを入力し、データをプルするときにアルファベット順に並べ替えたいと思います。

よくわからない場合は、次の例をご覧ください。

「employee」と「boss」はどちらもTo-Many関係のNSManagedObjectsです。各ボスには多くの従業員がいますが、従業員には1人のボスしかいません。ボスの配列を取得した後、従業員のリストを含むUITableViewControllerをプッシュします。NSFetchRequest中に従業員を事前に並べ替えて、表示しやすくしたいと思います。これは可能ですか、そしてどうすればそれを行うことができますか?

4

1 に答える 1

2

逆からフェッチしてみませんか?興味のある上司の一意の ID を既に知っていると仮定すると、次のような述語を作成できます。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:employeeEntity];
[req setPredicate:pred];

これにより、bossId が一致する従業員がフェッチされます。その後、ソート記述子をそのフェッチ リクエストに追加して、アルファベット順に並べ替えることができます。

または、現在の実装で取得した NSManagedObject インスタンスの配列を取得し、並べ替え記述子を使用してそれらを並べ替えることができます (従業員の名前がプロパティ "name" にあると仮定します)。

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO];
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

「ソート済み」を使用してテーブルビューにデータを入力します。

注: このために NSFetchedResultsController を使用していない理由について少し混乱しています。

于 2010-10-25T19:11:45.693 に答える