CoreDataを使ったアプリで、リリース後にエンティティに属性を追加したい場合の対応方法。
もちろん、今のデータを保持したままマイグレーションさせるのが前提。
- MagicalRecord使用済み
- アプリリリース後にエンティティに属性を追加する
- 当然、今保存されているデータは引継がれることが前提
MagicalRecord
セットアップ部分。
AppDelegate.m
1 2 3 4 5 6 7 |
|
どのセットアップメソッドを使用するか
ここを参考:http://www.raywenderlich.com/56879/magicalrecord-tutorial-ios
CoreDataを作成した際の {任意の名前}.xcdatamodel
が、プロジェクト名と同じであれば
- setupCoreDataStack
- setupCoreDataStackWithInMemoryStore
- setupAutoMigratingCoreDataStack
違うならば
- setupCoreDataStackWithStoreNamed:
- setupCoreDataStackWithAutoMigratingSqliteStoreNamed:
AutoMigrating
がついている方は、属性追加などをした際に可能であれば自動でマイグレーションしてくれる。
Xcode
Modelのバージョンを追加
{任意の名前}.xcdatamodel
を選択し、Editor –> Add Model Version…
新しく追加したModelに属性を追加
新しく追加した方のモデル(Model2)に属性を追加する。
Current Versionの変更
- Model.xcdatamodeledを選択する
- File inspectorを選択し、
Model Version -> Current
で、追加した方(Model2)を選択する - Model2.xcdatamodeledにチェックマークがつく
属性名の変更など
属性名の変更などについては、Lightweightマイグレーションという手法を使用するらしい(未検証) 。
また、マッピングモデルを使ったマイグレーションも存在するらしい(未検証)。
参考
- http://www.raywenderlich.com/56879/magicalrecord-tutorial-ios
- iOS Core Data 徹底入門(10章)