3

私はあなたのためにすべてがうまくいくことを願っています:)

Core Data を使用したデータベースがあります。私のアプリケーション V1.0 では、ユーザーはアプリにいくつかのファイルをインポートできます。ここで、V2.0 の場合、モデルに属性を追加したいと思いますが、V1.0 を持っていて保存されたファイルをいくつか持っているユーザーは、すべてのファイルを保持する必要があります (アプリをアップグレードする場合は削除しません...) . そこで、新しい属性で新しいデータ モデルを作成し、現在バージョン管理されているコア データ モデルを新しいデータ モデルに設定しました...わかりました。しかし、アプリを起動すると、ファイルは削除されます。

通常、マッピング モデルを使用する必要があります。しかし、これを行う方法は?マッピング モデルを作成するときのソース データ モデルと宛先データ モデルはどれですか?

手伝ってくれてどうもありがとう!良い一日を!:)

編集:

新しい属性を追加するだけで、属性の名前を編集しない場合、マッピング モデルを作成する必要はないかもしれません...いいえ?

4

1 に答える 1

5

マッピング モデルを使用する場合、ソース モデルは v1.0 モデルになり、宛先は新しい v2.0 モデルになります。Lightweight Migration を使用すると、マッピング モデルを使用せずに済む場合があります。ドキュメントはこちらです。

つまり、App Delegate に移動して、永続ストアに関連するオプションを設定する必要があるということです。

次のように見えるはずです

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES};

[persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:config URL:storeURL options:options error:&error];

キーは Core Data に、NSMigratePersistentStoresAutomaticallyOption現在の管理対象オブジェクト モデルのバージョンが使用しているストアと異なるかどうかを確認し、ストアを更新されたモデルに移行するように指示します。はNSInferMappingModelAutomaticallyOption、マッピング自体を解決しようとするように指示します。これは「軽量移行」ビットです。

そのほとんどは既に存在します。あとは、オプション ディクショナリを追加するだけです。方法になり- (NSPersistentStoreCoordinator *)persistentStoreCoordinatorます。少なくとも を設定しない場合NSMigratePersistentStoresAutomaticallyOption、移行は行われません。

軽量マッピングは、開発中にも役立ちます。これは、毎回マッピングをやり直す必要なく、モデルを変更できることを意味します。

于 2013-04-05T08:37:35.023 に答える