EOMappingSaving
2007/03/30 (Fri) 22:07:46 JST
保存時は「オブジェクトを生データに変換する」というフェッチ時と逆の処理を行います。 オブジェクト(カスタムクラスのものを含む)はSQL文を評価するとき、 EOAdaptorChannel.evaluateExpression
でバイナリか文字列のデータに変換されます。このメソッドは EOAttribute.adaptorValueByConvertingAttributeValue
でデータを変換します。 もしデータが基本的なクラスであれば何もしませんが、カスタムクラスであればユーザが指定したメソッドを使ってデータを変換します。
このとき、 evaluateExpression
にはすでに組み立てられたSQL文(EOSQLExpression)が渡されます。 なぜSQL文が出来上がった後にデータを変換するのかというと、EOSQLExpressionではバインド変数が利用されているからでしょう。 つまりこの時点のEOSQLExpressionはSQLコマンドを組み立てているだけで、おそらくバインドされている変数はカスタムデータのままです(※検証してません)。EOSQLExpressionのバインド変数は?NSMutableDictionaryで管理されていますから、他のオブジェクトからでも自由に変更できます。 ?EOAdaptorChannelはカスタムデータを基本データに変換したら、SQL文を実行します。
図:保存時のデータ変換
Inverse Pages: フェッチと保存