0

Core Data の使用に問題があります。

私のコア データ モデルには、GroveエンティティとTreeエンティティがあり、 と の間には 1 対多の関係がGroveありTree、 と の間には 1 対 1 の関係がTreeありGrove ます (各ツリーは最大 1 つのグローブにある場合があります)。

ただし、一部Treeは「ワイルド」であり、どの にも属さない場合がありますGrove

fetResultController を使用して、すべてのツリーをテーブル ビューに表示しようとしています。各木立はテーブル ビューのセクションであり、「野生の」木は別のセクションにある必要があります。

私のコードは次のようなものです:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Tree" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sectionSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Grove.name" ascending:YES];
    NSSortDescriptor *rowSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"type" ascending:YES];
    NSArray *sortDescriptors = @[sectionSortDescriptor, rowSortDescriptor];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"Grove.name" cacheName:nil];

ご覧のとおり、すべてのツリーを取得しています。セクションを決定するために使用される最初のソート記述子は、木から木立への 1 対 1 の関係に基づいており、木立の名前を探します。2 番目のソート記述子は、特定のセクション内のツリーをソートするために使用され、タイプ別にソートします。

このコードは、木立が定義されている場合はまったく問題なく機能します。ただし、grove=nil のツリーはこのリクエストではフェッチされません。必要な動作を実現する方法を知っていますか? 野生の木のために偽の木立を作らなければなりませんか?

4

1 に答える 1

0

Groveあなたが示唆するように、「なし」を表す特別なインスタンスを作成することをお勧めします。

別の解決策は、木立をフェッチし、次のようにテーブル ビュー データソース メソッドを操作することです。

  • 結果の数 +1 をセクションの数として返します。たとえば、野生の木の最後のセクション。
  • 返されたグローブ エンティティに従ってセクション ヘッダーを構成します。
  • セクション内の行数として theGrove.trees.count を返し、最後のセクションの他のツリーに対して特別なフェッチを行います。
  • 等..

要点がわかります。これはもう少し複雑で、フェッチされた結果コントローラーを非標準的に使用しますが、以前は非常にうまく機能することがわかっていました。

于 2013-11-02T16:12:46.883 に答える