3

私はそのようなコアデータモデルを持っています: ParentObject <--->> ChildObject

と の両方ParentObjectに次ChildObjectのような属性がありますlevelNumber

typedef enum {
    Primary,
    Secondary,
    Tertiary
} LevelNumber;

ParentObject と childObject の両方でレベル番号を int から文字列に変換するメソッドもあります。

-(void) levelString
{
    switch(self.levelNumber)
   {
      case Primary: return @"Primary";
      case Secondary: return @"Secondary";
      case Tertiary: return @"Tertiary";
      default: return @"Error";

   }

}

これで、テーブルビューに FetchedResultsController があり、ParentObject. セクション名で取得しようとしているのは次のとおりです。

  • ParentObjectSecondaryまたはの場合Tertiary、セクション名をSecondaryまたはとして表示しTertiaryます。
  • ParentObjectがまたはPrimaryのいずれかである場合は、セクション名を または として表示ChildObjectsします。SecondaryTertiarySecondaryTertiary
  • ParentObjectとすべてが のChildObjects場合、Primaryセクション名を次のように表示しますPrimary

の を調べるだけでよい場合は、次のような非常に簡単levelNumberですParentObject-

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"ParentObject"];
NSSortDescriptor *levelNumSD = [NSSortDescriptor sortDescriptorWithKey:@"levelNumber" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:levelNumSD, nil];

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:myContext
                                                                      sectionNameKeyPath:@"levelString"
                                                                               cacheName:nil];

FRC の制限は、SortDescriptor の結果が表示されるのと同じ順序で結果を返さなければならないことであることを理解しています。ChildObjectここにもチェックを組み込むにはどうすればよいですか。それは新しい種類の SortDescriptor でしょうか、それとも何か他のものでしょうか?

4

1 に答える 1