Edit Diff Annotate History
Upload
List
Recent
Alias
Top
Help
EODelegateUsage : Edit
Last updated: Fri Mar 30 22:07:46 +0900 2007
!デリゲートのセット デリゲートをセットする方法はクラスによって異なりますが、多くのクラスではsetDelegateもしくはsetDefaultDelegateメソッドでセットできます。 次のクラスのかっこ内がデリゲートをセットするメソッドです。 *Foundation **NSArray (setOperatorForKey) *EOAccess **EOAdaptor (setDefaultDelegate, setDelegate) **EOAdaptorChannel (setDelegate) **EOAdaptorContext (setDefaultDelegate, setDelegate) **EODatabaseContext (setDelegate) **EOModelGroup (setClassDelegate, setDelegate) *EOControl **EOClassDescription (setClassDelegate) **EOEditingContext (setDelegate) **EOQualifier (setSupportForClass) **EOSortOrdering (setSupportForClass) 多くのデリゲートメソッドは「クラス名.ClassDelegate」もしくは「クラス名.Delegate」インターフェースとして定義されており、setClassDelegateとsetDelegateでデリゲートするオブジェクトをセットします。 Delegateのメソッドはセットしたインスタンスのみの挙動を変更しますが、ClassDelegateのメソッドはクラスのインスタンスすべての挙動を変更します。 アダプタ・データベースレベルのデリゲートが用意されているクラス(EOAdaptor, EOAdaptorChannel, EOAdaptorContext, EODatabaseContext)のうち、EOAdaptorを除くクラスは必要に応じて動的に生成されるので、アプリケーション起動時にデリゲートをセットすることができません。 ただしその代わりにデフォルトデリゲート(defaultDelegate)が用意されており、上記のオブジェクトの生成時にデリゲートをセットしてくれます。 (EOAdaptorContextのデフォルトデリゲートはEOAdaptorChannelにもセットされます) 個別にデリゲートをセットする場合は、EODatabaseContextならEOObjectStoreCoordinatorの cooperatingObjectStores や objectStoreForFetchSpecification などでオブジェクトを取得することができます。 このEODatabaseContextをたどるとEOAdaptorChannelにデリゲートもセットできます。 次のコードはEODatabaseContextとEOAdaptorChannelにデリゲートをセットする例です。 // それぞれのデリゲートするオブジェクト DatabaseContextDelegate dcd = new DatabaseContextDelegate(); AdaptorChannelDelegate achd = new AdaptorChannelDelegate(); // EODatabaseContextの配列を取得する Enumeration e = EOObjectStoreCoordinator.defaultCoordinator() .cooperatingObjectStores() .objectEnumerator(); while (e.hasMoreElements()) { // EODatabaseContextにデリゲートをセット EODatabaseContext dbCxt = (EODatabaseContext)e.nextElement(); dbCxt.setDelegate(dcd); // EOAdaptorChannelの配列を取得する Enumeration e2 = dbCxt.adaptorContext().channels().objectEnumerator(); while (e2.hasMoreElements()) { // EOAdaptorChannelにデリゲートをセット ((EOAdaptorChannel)e2.nextElement()).setDelegate(achd); } }