CoreDataというのはMacの世界でのORマッパの模様。
iPhoneでは実際のDBはSQLite3が使用される。
【登場人物】
・NSManagedObjectContext: DBコネクション相当。AppDelegateでインスタンスを作成し、データベースを扱う必要があるクラス(ViewControllerとか)では、AppDelegateからひたすらNSManagedObjectContextのインスタンスを引き回す。
・NSFetchRequest: DBからデータを取得する際に使用する。要するにSELECTに相当。取得したエンティティは配列(NSArray)で取得される。
・NSFetchedResultController: DBからデータを取得する際に使用する。NSFetchRequestとの相違は、NSFetchRequestはエンティティを配列で返してそこで解放するのに対し、NSFetchedRequestControllerはずっと使い続けて、必要に応じて必要なエンティティをインデックス指定で取得する。TableViewとの連携を前提に作られており、一覧表示など、テーブルのデータをある程度継続的に表示するときに使うっぽい。
・NSManagedObject: エンティティ。NSFetchRequestやらNSFetchedResultControllerから取得される。通常、モデルクラスをNSManagedObjectから派生させて用意しておく。あと、Update、Insert、Delete相当の処理もこのクラスで行う。
NavigationController-basedでプロジェクトを作るときにCoreDataを使用するにチェックをつけておくと、以下のコードが自動的に作成される。
・AppDelegateでNSManagedObjectContextのインスタンスを作成する処理
・RootViewControllerにNSManagedObjectContextのインスタンスを引き渡す処理
・アプリケーション終了時に、未コミットの前データをコミットする処理。
あとはRootViewControllerでNSManagedObjectContextのインスタンスから自由にDBにアクセスしてね、というシステム。