Core Data Programming Guide: What Is Core Data? このあたりを読んで、CoreDataを構成する要素・使い方を雑にまとめてみました。
構成要素
.xcdatamodeld
テーブルを定義する。
NSManagedObjectのサブクラス
データベースのテーブル単位にクラスを定義する。
NSManagedObjectContext を経由して、取得・保存などを行う。
生成・取得方法にはいくつかある。
-
NSEntityDescription.insertNewObjectやNSEntityDescription.entityにて生成。 -
NSFetchRequestにて取得。
DataController
自分で実装する。
NSPersistentContainer を生成・管理する。
AppDelegate の didFinishLaunchingWithOptions の中で生成、そのインスタンス変数となる。
AppDelegate 以外の各クラスからは、 AppDelegate 経由で取得する。
NSPersistentContainer
iOS 10系から導入。
NSManagedObjectModel, NSPersistentStoreCoordinator, NSManagedObjectContext のあたりを上手く生成・管理してくれる。
NSPersistentContainer.viewContext により、 NSManagedObjectContext を取得できる。
NSManagedObjectContext
"NSManagedObjectのサブクラス"を管理するクラス。
イメージとしては、ここから"NSManagedObjectのサブクラス"を払い出してもらい、利用・修正し、ここに返すことで保存してもらう。
NSPersistentContainer から取得できる。
NSFetchRequest
対象のentity、条件などを指定して、DB内を検索する。
インスタンス化し、必要な情報を設定、NSManagedObjectContext に渡すことで、検索を実行できる。
備考
iOS10より前のDataController.init
NSPersistentContainer の生成を行わず、下記を行う。
-
Bundle.main.urlを取得する。 -
NSManagedObjectModelを生成する。 -
NSPersistentStoreCoordinatorを生成する。 -
NSManagedObjectContextを生成する。 -
NSPersistentStoreCoordinator.addPersistentStoreを実行、引数のclosureを実行する。