0

次の状況をコアデータモデルのv1からv2にマッピングする際に問題が発生しました。

モデルのv1には、属性の作成者を持つbookという名前のエンティティがありました。そこで、著者の名前と名前、さらには数人の著者の名前と名前を保存しました。私が知っている非常に貧弱なデザインですが、それはそうだったのです。

モデルのv2では、モデルを改善し、属性firstnameとlastname、および予約する関係を持つエンティティ作成者を追加しました。関数(作成者の数と名前と名前を分離して返す)を呼び出し、その関数の出力に関して新しいエンティティを作成するような方法でマッピングモデルをカスタマイズする方法を知っている人はいますか?

ありがとうb00tsy

4

2 に答える 2

3

まず、ソースモデルと宛先モデルの間にマッピングモデルを作成します。そこから、この分割を処理するマッピングモデル内のオブジェクトを選択します。マッピングモデルエディタの右側に、であるクラスに名前を付けることができる場所が表示されますNSEntityMigrationPolicy。ここにカスタムマッピングポリシークラスを追加することで、標準コードの代わりにコードを使用するように移行に指示できます。

そこから、クラスを作成し、サブクラスにしNSEntityMigrationPolicyます。そのクラス内でメソッドをオーバーライドします-createDestinationInstancesForSourceInstance: entityMapping: manager: error:。このメソッドはオブジェクトごとに1回呼び出されます。宛先オブジェクトを作成し、すべての属性をソースから宛先にコピーするのはユーザーの責任です。そのコピーの一部として、適切と思われるロジックによって名前を名と姓に分割できます。そのメソッドの最後に、が新しく作成された宛先オブジェクトを認識し、残りの移行が正しく機能する-associateSourceInstance: withDestinationInstance: forEntityMapping:ように、必ず呼び出してください。NSMigrationManager

注:リレーションシップ関連のメソッドもカスタムコードを作成する必要がない限り、それらのメソッドをオーバーライドする必要はありません。

それがすべてです。

于 2010-06-22T15:19:33.037 に答える
0

コアデータモデルのバージョン管理とデータ移行プログラミングガイドは、移行部分を実行する方法を示しています。

姓名の分離については、問題があるかもしれません。ファーストネームとラストネームはどこで区切りますか?スペースで?「デル・トーレス」などはどうですか?「ミドルネーム」を使用する作者はどうですか?

それは難しいことであり、あなたが考慮すべきものです。

于 2010-06-22T13:55:17.483 に答える