マッピング モデルを使用してコア データの移行を行っています。
Report
新しいモデルは、 というエンティティに関係を追加しrootReport
ます。
この関係をオプションではなく必須にしたいと思います。既存の Report
エンティティの場合rootReport
、自己参照にする必要があります。今後追加されるレポートは、それ自体だけでなく、他のレポートをルートとして参照します。
私が提供したリンクには、マッピングモデルの式がどのように機能するかの概要がよくわかります。それらはNSExpressionと互換性があるものと同じです。これに基づいて、rootReport に次のマッピング ルールを使用しています。
FUNCTION($manager,
"destinationInstancesForEntityMappingNamed:sourceInstances:",
"ReportToReport",
$source.SELF)
[私はそれをフォーマットしました – ファイルでは、すべてが 1 行にまとめられています。]
ただし、これを rootReport リレーションで機能させることはできませんでした。rootReport が一部のレポートに設定されていないという苦情とともに、移行後に常に検証エラーが発生します。
NSUnderlyingError = "エラー ドメイン = NSCocoaErrorドメイン コード = 134110 \"操作を完了できませんでした. (Cocoa エラー 134110.)\" UserInfo=0x7b294630 {attribute=rootReport, entity=Report, reason=検証エラー 必須の宛先関係に属性値がありません}"
何がうまくいかないのか、またはデバッグ方法に関する提案についての手がかりはありますか? 処理はすべて App Kit で行われるため、例外が表示されるまでに、突っ込んで調査するコンテキストがありません。
完全に自動化されたマッピングから完全に手動化されたマッピングまでの階層と、ここにあるすべてのステップについて詳しく説明しています。
これらのマッピング式で何ができるか (少なくとも属性には有効)について詳しく知りたい場合は、こことここに良い記事があります。
プロジェクトから任意のコードを呼び出したり、データの既存のメソッドを呼び出すマッピング式を簡単に設定できます。それはすべてかなりきれいでエレガントです。
FUNCTION
これは、デフォルトのリレーション マッピングが呼び出す式を使用して行います。クラス メソッドを呼び出すには、ここFUNCTION(CAST("<Class-Name>", "Class"), "<class-method-name>", <any>, <arguments>, <in>, <a>, <list>)
に示すように使用します。