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を実行する。