XcodeでCoreDataのテーブルを変更すると変更前のデータを使うことができません。
既にAppStoreにリリースしている場合、バージョンアップして変更前のデータが使えなくなるのは困ります。

そこで、今回はCoreDataの自動マイグレーション機能を使って、変更前のデータを引き継ぎながら変更後のCoreDataテーブルを使用できる方法を書きます。

1.自動マイグレーションを有効にする。
AppDelegete.swiftファイルに以下の記述を追加します。

// optionsを追加
let options = [NSMigratePersistentStoresAutomaticallyOption: true,NSInferMappingModelAutomaticallyOption: true]

if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: options, error: &error) == nil {

2.新しくCoreDataモデルを追加する。
.xcdatamodeldファイルを選択している状態でEditor→Add Model Version...を選択。
Version nameに新しいモデル名称を入れて、Based on modelに今までのデータモデルを選択します。


新しいデータモデルにチェックが付いている事を確認します。


古いデータモデルにチェックが付いていた場合は、Model VersionのCurrentを新しいモデルバーションに変更することでできます。


そして、新しいデータモデルに追加や変更を行います。

3.Mapping Modelを追加する。
どのデータからどのデータに移行するのかを定義するMapping Modelを追加します。
File→New→File...と選択し、Core DataのMapping Modelを選択してNext。
Mapping Model Source Data Modelで移行元のデータモデルを選択してNext。
Mapping Model Target Data Modelで移行先のデータモデルを選択してNext。
作成するファイル名を入力してCreateします。
.xcmappingmodelというファイルが作成されればOKです。


以上でデータ移行の手順は終わりです。
新しいデータモデルにAttributeを追加した場合は、以前のデータを読み込んだ時にはnullとなっているので気をつけてコーディングしましょう!

「巻数メモ」アプリをバージョン1.1にアップデートしました!
その時にCoreDataのデータ移行の方法が分からなかったのでメモです。
自動マイグレーションという便利な機能があって良かった。

  巻数メモ