iOS
CoreData

Core Dataについて調べたメモ

Core Data Programming Guide: What Is Core Data? このあたりを読んで、CoreDataを構成する要素・使い方を雑にまとめてみました。

構成要素

.xcdatamodeld

テーブルを定義する。

NSManagedObjectのサブクラス

データベースのテーブル単位にクラスを定義する。

NSManagedObjectContext を経由して、取得・保存などを行う。

生成・取得方法にはいくつかある。

  • NSEntityDescription.insertNewObjectNSEntityDescription.entity にて生成。
  • NSFetchRequest にて取得。

DataController

自分で実装する。
NSPersistentContainer を生成・管理する。

AppDelegatedidFinishLaunchingWithOptions の中で生成、そのインスタンス変数となる。
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を実行する。