Core DataでNSFetchedResultsControllerを利用する

シェアする

Header

iOS用の純正データベースフレームワーク「Core Data」にはテーブルビューと組み合わせて使用することができるNSFetchedResultsControllerというクラスが存在します。

NSFetchedResultsControllerではデータベースに格納されたデータをNSIndexPathを指定して取得することができるのでテーブルビューのセルに設定する情報を簡単に取得できます。

またNSFetchedResultsControllerDelegateを設定すればデータの変更通知を受け取り、きめ細かくテーブルビュー側に反映することも可能です。

今回はCore Dataに保存されたデータを、セクションごとに分類してテーブルビューに表示する方法を説明します。

サンプルプログラムの作成

Xcodeを立ち上げ新規プロジェクトで「Single View Application」を選択します。プロジェクトの設定で「Use Core Data」のチェックを入れてプロジェクトを作成します。

.xcdatamodeldの作成

Entity

.xcdatamodeldを選択し、新しくBookエンティティを追加します。publisher、titleという名前の属性を追加し両方の方をStringに変更、Optionalのチェックを外しておきます。

NSManagedObjectのサブクラスの作成

「File > New > File」を選択し「Core Data」から「NSManagedObject subclass」を選択します。先ほど作成した「Book」エンティティを選択すると以下の2つのファイルが作成されます。

Book.swift

Book+CoreDataProperties.swift

「String?」となっていたら「String」に修正しておきます。

ViewControllerの処理の作成

Main.storyboardにTable Viewをドロップして、ViewController.swiftにControlドラッグしtableViewという名前でOutletを作成しておいてください。またTable ViewのデータソースとしてViewControllerを指定しておきます。

「Use Core Data」にチェックを入れてプロジェクトを作成した場合、Core Dataを使用するためのお膳立てはAppDelegateで自動的に行われています。このためViewController内ではNSFetchedResultsControllerを生成するだけですみます。

まず全体のソースコードを掲載します。

viewDidLoad()でNSFetchedResultsControllerを生成しています。データをセクション分けして表示する際ソートキーの指定が重要です。セクションを指定する場合そのセクションに対応した属性が第1ソートキーとなります。

sectionNameKeyPathでも”publisher”を指定していることに注目してください。

UITableViewDataSourceの実装ではfetchedResultsControllerから情報を取得します。Core DataへのアクセスをNSFetchedResultsControllerが仲介することでとてもシンプルなッコードになっていることがわかります。

実行結果

Result

プログラムを実行すると上の画像のような結果が評価されます。出版社ごとに書籍がタイトル順で表示されました。

まとめ

NSFetchedResultsControllerを利用してUITableViewで効率良くCore Dataのデータを表示する方法を説明しました。

今回は説明していませんが、実際のアプリではデータが追加、更新、削除されるのが普通です。NSFetchedResultsControllerDelegateを利用してUITableViewの情報を更新する方法は次回説明します。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

フォローする