«

»

8月 04

CoreDataを利用したTableViewのSection表示


最近次回作のiPhoneアプリの開発のためにCoreDataを使ったアプリ開発の勉強を始めました。

色々調べたら、そもそものXCodeの機能としてCoreDataを使ったアプリのテンプレートを作成する機能がありました。

具体的には以下のとおり。

  1. 「ファイル」→「新規プロジェクト」をクリック
  2. 左ペインから iPhone OS の Application を選択
  3. 右ペインから「Navigation-based Application」を選択して「Use Core Data for Storage」にチェックを入れて「選択」をクリック

この状態で既にCore Dataを使ったアプリのテンプレートができていて、実行するとサンプルのアプリが動作します。

tableView用のデリゲートも既に実装されていていますが、Section用のデリゲートは初期の状態では設定されていないため自身で実装する必要があります。

CoreData内のデータをSection毎に取得するために以下のように sectionNameKeyPath にセクション分けしたいEntityの属性名を記載します。

変更前)
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];

変更後)
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"KeyName" cacheName:@"Root"];

Section数を返すデリゲートは既にテンプレートプロジェクト内に定義されているため、後はSectionTitleを表示するデリゲートを実装すればセクションが表示されるようになります。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
 id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
 return [sectionInfo name];
}

なお、Sectionに含まれるインスタンスの分類についてもNSFetchedResultsController が自動的に振り分けまでやってくれます。

コメントをどうぞ

メールアドレスは公開されません

次の HTMLタグおよび属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

edited by