|
|
Log In | Not a Member? |
Contact ADC |
アプリケーションと外部データストアの間でオブジェクトを仲介するフレームワークオブジェクトのコレクションは、「永続性スタック」と総称されています。スタックの最上部には管理対象オブジェクトコンテキストがあり、スタックの最下部には「永続オブジェクトストア」があります。管理対象オブジェクトコンテキストと永続オブジェクトストアの間には、永続ストアコーディネータがあります。
Core Data は、デフォルトで 1 つの管理対象オブジェクトコンテキスト、1 つの永続ストアコーディネータ、および外部データストアを備えた 1 つの永続オブジェクトストアで構成される永続性スタックを提供します。スタックは、永続ストアコーディネータを 1 つしか持つことができませんが、必要に応じて管理対象オブジェクトコンテキストまたは永続オブジェクトストアを追加することができます。また、必要であれば追加のスタックを作成することもできます。
永続性スタック
不整合編集
競合検出とスナップショット
永続ストアコーディネータは、永続ストアのグループが 1 つの集合ストアに見えるように、管理対象オブジェクトコンテキストにファサードを提示するように設計されています。そのため、管理対象オブジェクトコンテキストは、コーディネータが対象とするすべてのデータストアの和集合に基づいてオブジェクトグラフを作成できます。図 1 に示す例では、従業員と部署を 1 つのファイルに格納し、顧客と会社を別のファイルに保存しています。オブジェクトを受信すると、自動的に適切なファイルから取り出され、オブジェクトを保存すると、適切なファイルにアーカイブされます。
図 1:高度な永続性スタック

つまり、実質的には永続ストアコーディネータがスタックを「定義」します。新しいスタックを作成する必要がある場合は、新しい永続ストアコーディネータを作成し、必要に応じて永続ストアを追加します。これによってファイルのバージョニングをサポートできます。各コーディネータ(ひいては管理対象オブジェクトコンテキスト)は、管理対象オブジェクトモデルのさまざまなコピー、ひいては異なるバージョンを使用することができます。
永続オブジェクトストアと直接対話するためのメソッドはありません。必要があれば、コーディネータの基礎をなすオブジェクトストアの ID を取得することができます。これにより、たとえばストアがすでに追加されているかどうか、2 つのオブジェクトが同じストアのものかどうかを判断することができます。
管理対象オブジェクトコンテキストに関連付けられているオブジェクトグラフは、内部的に一貫性を保っていなければなりません。しかし、同じアプリケーションに複数の管理対象オブジェクトコンテキストがある場合は、それらに整合性のないデータセットが含まれていたり、同じデータについて異なる「ビュー」を示す可能性があります。1 つのアプリケーションに、それぞれが永続ストアの同じエントリを示すオブジェクトを含むけれども、その特性が互いに矛盾する異なるコンテキストを持つことができます。
従業員アプリケーションでは、これによって、たとえば図 2 に示すように、2 つの別々のウインドウに、別々の部署に分散され、上司が異なる同じ従業員のセットを表示できます。
図 2:互いに矛盾したデータ値を持った管理対象オブジェクトコンテキスト

しかし、最終的には「真実」は 1 つしかなので、データを保存するときには、これらのビュー間の違いを調整する必要があります。2 つの管理対象オブジェクトコンテキストが同じスタックを共有している場合(同じ永続ストアコーディネータを共有します)、一方にコミットされた変更が他方に直接伝播する場合があります。永続ストアコーディネータは、セット内の管理対象オブジェクトコンテキスト同士の変更を伝える役目を担います。デフォルトでは、一方にコミットされた変更は他方に直接適用されます。この動作はプログラムで設定することができます。2 つのコンテキストが異なるスタックにある場合(すなわち、異なるアプリケーションで同じファイルを読んでいる場合)、状況はもっと複雑です。
1 つのアプリケーションに複数の永続性スタックを作成し、複数のスタックが同じ外部データストアを参照していると、概念上同じ管理対象オブジェクトが 2 つの永続性スタックで同時に編集される可能性があります。この状況は、アプリケーションのデータを含むファイルを 2 人のユーザが同時に編集する場合や、データをネットワークサービスから取り出す場合に似ています。さらに、あるアプリケーションで変更を加えて永続ストアに保存すると、別のアプリケーションにおいて対応するオブジェクトが無効になる可能性があります。通常は、最初のアプリケーションで行った変更を、2 番目のアプリケーションによる変更で上書きしないようにする必要があります。
Core Data が永続ストアからオブジェクトを受信するとき、受信オブジェクトの状態のスナップショットを取得します。スナップショットとは、オブジェクトのプロパティ(通常、対一関係の対象になっているオブジェクトのすべての属性とグローバル ID)のディクショナリです。スナップショットはオプティミスティックロックに関与します。フレームワークは保存を行うときに、編集されたオブジェクトのスナップショットの値をその時点における永続ストアの値と比較します。それらの値が異なる場合は、オプティミスティックロックエラーが発生します。
Preliminary Last updated: Tiger
|
Get information on Apple products.
Visit the Apple Store online or at retail locations. 1-800-MY-APPLE Copyright © 2007 Apple Inc. All rights reserved. | Terms of use | Privacy Notice |