NSFetchedResultsController のおさらい

2010年7月24日土曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

改めて調べなおした。NSFetchedResultsController はデータ取得と操作(挿入・変更・削除)に分けて考えるとわかりやすい。以下、UITableView および UITableViewController と組み合わせた典型的なパターンについて説明する。


データ取得


UITableView が表示するデータを UITableViewDataSource へ要求する。通常 UITableViewController がこのプロトコルを実装していて NSFetchedResultController から必要なデータを取得し、UITableViewへ返す。NSFetchedResultController は大抵の場合、UITableVIewController 初期化時にフェッチを行っていて、データ取得の要求があった場合は取得済みのデータを返す。

なお NSFetchedResultController の持つ cache はデータそのキャッシュではなく、section と ordering に関するもの。アプリケーションのレベルで管理される。
Where possible, a controller uses a cache to avoid the need to repeat work performed in setting up any sections and ordering the contents. The cache is maintained across launches of your application.

[参照] NSFetchedResultsController Class Reference


データ操作


データの追加や変更、削除は、NSFetchedResultsControllerではなく、NSManagedObjectContext に対して行う(② データ操作)。NSFetchedResultsController は NSManagedObjectContext を監視していて NSManagedObjectContext に変更が入った場合は NSFetchedResultsControllerDelegate へコールバックする(③ コールバック)。

コールバックされたらモデルの変更状況をビューである UITableView へ反映させる(④ 表示更新)。

- - -
Xcode で新規プロジェクトを作成する時に Navigation-based Application を選び、"Use Core Data for storage" にチェックを入れると、データの取得に加え、コールバックメソッドの処理の雛形を生成してくれる。


参考情報


NSFetchedResultsController Class Reference
リファレンス。Overview は簡潔だがわかりやすい。delegate と cache の話がまとめられている。
NSFetchedResultsControllerDelegate
コールバック用のプロトコル

Responses

Leave a Response

人気の投稿(過去 30日間)