初期化

フレームワークは次のようなコンストラクタでエンタープライズオブジェクトを生成します。

 
    public MyClass(
        EOEditingContext anEditingContext,
        EOClassDescription classDescription,
        EOGlobalID globalID
    )


このコンストラクタは、エンタープライズオブジェクトクラスの新しいインスタンスを返すべきです。 引数を使って必要な初期化を行うことができます。 Javaクライアントとサーバで生成されるエンタープライズオブジェクトクラスには、このコンストラクタが必要です。

エンタープライズオブジェクトは、生成後に awake... メソッドが実行されます。 実行されるメソッドは、オブジェクトがデータベースからフェッチされたかアプリケーション内で生成されたかによって変わります。 アプリケーション内で生成された場合、 awakeFromInsertion が実行されます。 これらのメソッドをオーバーライドすると、生成されたオブジェクトを元にしてプロパティの初期値を初期化することができます。


変更の通知

フレームワークがアプリケーションを管理するには、エンタープライズオブジェクトは状態が変更されたら監視者に通知しなければなりません。 インスタンス変数などの状態が変更される前に、オブジェクトは willChange を実行して通知します。 このメソッドは、実行したオブジェクトがこれから変更されることを監視者に通知します。

オブジェクトの主な監視者は、オブジェクトが所属するEOEditingContextです。 EOEditingContextはEOObjectStoreのサブクラスであり、メモリ中のオブジェクトを管理します。 オブジェクトの挿入、削除、更新を追跡し、適切な永続ストアに変更を知らせます。 オブジェクトの所属するEOEditingContextは、オブジェクトの editingContext メソッドで取得できます。


オブジェクトとクラスのメタデータへのアクセス

EOEnterpriseObjectインターフェースの一部のメソッドは、オブジェクトのプロパティについての情報を提供します。 オブジェクトの classDescription メソッドはクラスの情報を持つオブジェクトを返します。 このオブジェクトに関してはEOClassDescriptionを参照してください。 エンタープライズオブジェクトから直接実行できるメソッドには次のようなメソッドがあります。 マッピングされているエンティティの名前を返す entityName 、属性とリレーションシップを含むすべてのプロパティの名前を返す allPropertyKeys、同様にすべての属性名前を返す attributeKeys があります。

リレーションシップに関する情報を返すメソッドもあります。 toOneRelationshipKeystoManyRelationshipKeys はリレーションシップの名前を返します。 isToManyKey によって、リレーションシップ名がどちらのメソッドに含まれるか決まります。 deleteRuleForRelationshipKey は、リレーション先のオブジェクトが削除されたときにどう振る舞うのかを示します。 同様に ownsDestinationObjectsForRelationshipKey は、リレーション先にオブジェクトが追加されるか、取り除かれたときにどう振る舞うのかを示します。 もうひとつのメソッド classDescriptionForDestinationKey は、リレーション先のオブジェクトのEOClassDescriptionを返します。


スナップショット

key-value コーディングのメソッドは、プロパティの詳細を知ることなく、オブジェクトのプロパティにアクセスする手段を定義しています。 しかし次のような場合のために、フレームワークはオブジェクトの状態をそのまま保存しておく必要があります。 オブジェクトの変更を戻したり、変更された値を比較したり、変更されたレコードを保持することがあります。 スナップショットはこの処理を行うメソッド、すべてのプロパティを取得・設定するメソッド、処理に応じて必要な変換を行うメソッドを提供します。 スナップショットはすべてのプロパティを含む辞書であり、 updateFromSnapshot ではスナップショットをオブジェクトのプロパティに設定します。

スナップショットは、未コミットの変更をコミット済みの変更にマージするのに使われます。 その処理で使われるメソッドは changesFromSnapshotreapplyChangesFromDictionary です。


エンタープライズオブジェクトクラスを実装する

EOEnterpriseObjectのメソッドの中には実装・オーバーライドするためのものがあり、一部はフレームワークで使われるように定義されています。 フレームワーク内部で使われる多くのメソッドは、アプリケーションから実行することはほとんどありません。 次の表はカスタムエンタープライズオブジェクトでよく実装・オーバーライドするメソッドを強調表示しています。


生成
MyClass( EOEditingContext, EOClassDescription, EOGlobalID) 実装されていれば、このメソッドでエンタープライズオブジェクトを生成します。
awakeFromFetch オブジェクトのフェッチ後に初期化を行います。
awakeFromInsertion メモリ中にオブジェクトを生成した後に初期化を行います。


Key-Value コーディング: プロパティとリレーションシップへのアクセス
setKey key のプロパティに値を設定します。
key key のプロパティから値を取得します。
addToKey key のリレーションシッププロパティにオブジェクトを追加します。
removeFromKey key のプロパティからオブジェクトを取り除きます。
handleTakeValueForUnboundKey takeValueForKey でプロパティを検索できないときに実行されます。
handleQueryWithUnboundKey valueForKey でプロパティを検索できないときに実行されます。
unableToSetNullForKey オブジェクトでないプロパティに null を設定しようとしたときに実行されます。


検証
validateKey key のプロパティの値を検証します。
validateForDelete オブジェクトを削除する前に、すべてのプロパティを検証します。
validateForInsert オブジェクトを挿入する前に、すべてのプロパティを検証します。
validateForSave オブジェクトを保存する前に、すべてのプロパティを検証します。
validateForUpdate オブジェクトを更新する前に、すべてのプロパティを検証します。