管理オブジェクトコンテキストと永続用ストア

2007/03/30 (Fri) 22:07:46 JST

管理オブジェクトモデルはデータモデルの設計を表したものです。 実行時には、管理オブジェクトコンテキストを通してデータモデルにアクセスします。 このオブジェクト、つまり?NSManagedObjectContextのインスタンスは、Core Dataオブジェクト群への入り口を提供し、Core Dataとアプリケーション、それを支える永続用ストアへの仲介を行います。 さらに管理オブジェクトコンテキストはデータオブジェクトを検証し、管理オブジェクトモデルのルールに従っていることを保証します。 また、アンドゥやリドゥの操作も行います。

管理オブジェクトコンテキストは永続用ストアコーディネータも扱います。 このオブジェクト、?NSPersistentStoreCoordinatorのインスタンスは、管理オブジェクトの定義を管理しており、ディスク上に記録されたデータモデルファイルへのアクセス方法を提供します。

スクラッチからアプリケーションの開発を始めるのであれば、Xcodeが管理オブジェクトコンテキストにアクセスするための2種類のテンプレートを用意してくれます。 それぞれCocoaベースアプリケーションとCocoaドキュメントベースアプリケーションにあたります。 Core Dataアプリケーションテンプレートを使ってプロジェクトを作ると、次のようなメッセージを送ることで管理オブジェクトコンテキストを取得することができます。

[[NSApp delegate] managedObjectContext];

Core Dataドキュメントベースアプリケーションテンプレートを使ってプロジェクトを作ると、?NSPersistentDocumentクラスのmanagedObjectContextメソッドを使ってコンテキストを取得することができます。

Core Dataを既存のアプリケーションの追加するなら、管理オブジェクトコンテキストの生成と設定が必要になります。 以下はその一例です。

NSURL *url = [NSURL fileURLWithPath:@"path/to/file.xml"];

NSArray *bundles = [NSArray arrayWithObject:[NSBundle mainBundle]];
NSManagedObjectModel *model =
  [NSManagedObjectModel mergedModelFromBundles:bundles];
NSPersistentStoreCoordinator *coordinator =
  [[NSPersistentStoreCoordinator alloc]
    initWithManagedObjectModel:model];
[coordinator addPersistentStoreWithType:NSXMLStoreType
             configuration:nil
             URL:url
             error:&error];
context = [[NSManagedObjectContext alloc]
            initWithManagedObjectModel:model];

Inverse Pages: DevelopingWithCoreData