CoreData UIManagedDocumentでマイグレーション
CoreDataのUIManagedDocumentを使用している場合のマイグレーション方法について紹介します (iPhone SDKのバージョンはXcode 4.4.xとします)。 以下のような方が対象です。 - UIManagedDocumentをCoreDataとして使用している - アプリのアップデートに伴い、DBのテーブル構造を変更した - テーブル構造を変更したら、アプリがクラッシュする(NSInternalInconsistencyException) - 古いバージョンのアプリをいったん削除してインストールし直すと問題が発生しない 話を具体化するために以下のケースを想定して話を進めます - UIManagedDocumentを使用してアプリが動作している - アプリ名はMyAppで、バージョン1.0.0を開発済みで1.0.1を現在開発中 - 1.0.1ではテーブル構造を変更する(Bookmarkにtitleを追加する) - 1.0.0時点でのxcdatamodel名はMyDM、Entity名はBookmark、Attribute名はurl (String型)で、 title(String型)を新規に追加 する 以下のステップでUIManagedDocumentのマイグレーションを行います。 1. Model Versionを追加、Currentを変更 2. Mapping Modelを作成、Custom Policyを入力 3. Custom Policyに対応するEntity Migration Policyクラスを新規作成 4. -(BOOL)createDestinationInstancesForSourceInstance: entityMapping: manager: error:に追加するAttributeを記述する 5. UIManagedDocumentオブジェクトにオプションを指定 6. 動作確認テスト 1. Model Versionを追加、Currentを変更 Xcodeのメニューから[Editor] - [Add Model Version]を選択します。 [Based on model]から"MyDM"を選択、[Version name]にMyDM_1...