LoginSignup
4
5

More than 5 years have passed since last update.

Core Data の「Lightweightマイグレーション」と「カスタムマイグレーション」は混ぜられない

Posted at

調べたことのまとめです。
実際に試していなので確認はできていません。

前提

Core Data のマイグレーションには大きく分けて2種類ある。

  • Lightweightマイグレーション
    • データモデル (*.xcdatamodeld) を変更するだけで良い
    • iCloudの Core Data はLightweightマイグレーションしかできない
  • カスタムマイグレーション
    • Mapping Model が必要

問題

  • Lightweightマイグレーションとカスタムマイグレーションで設定が異なり、この2つを同時に行うことができない
    • addPersistentStoreWithType:configuration:URL:options:options の設定
      • Lightweightマイグレーションでは NSInferMappingModelAutomaticallyOption: true を指定する
      • カスタムマイグレーションでは指定しない
  • カスタムマイグレーションだけでやろうとすると Mapping Model が大量に必要になる
    • たとえばデータモデルが1, 2, 3とあるとき、Mapping Model は 1> 2、 2 -> 3 に加えて 1 -> 3 も必要

解決方法

Progressive Migration と呼ばれる方法がある。

  • Mapping Model を使って 1 -> 2、 2 -> 3 と順番にマイグレーションしていく
  • 前のバージョンから次のバージョンへのマイグレーションだけを考えればいい
  • 最新のバージョンまでマイグレーションを繰り返すので遅い
  • 本来はLightweightで済むマイグレーションも Mapping Model が必要?
  • サンプルコードなど詳しくは Custom Core Data Migrations · objc.io を参照

最後に

  • Lightweightだけで事足りるならLightweightだけのほうが楽
  • マイグレーションは難しい問題なので、できるだけマイグレーションしなくて済むように将来の拡張性を考えた余裕のある設計にしよう

参考

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5