CoreData Migration (Versioning of CoreData)

18 / Mar / 2015 by Ashu Baweja 1 comments

What is Migration ?

Migration is a way of telling Xcode how to transition the data from the old model to the new model .

Why migration required ?

When the model does not match the store, a migration is required. In order to perform a migration, Core Data (technically, an instance of NSMigrationManager) requires these things:

  • The destination managed object model (the one with the changes)
  • A managed object model that can open the existing store
  • The ability to infer mapping between the two models (for a lightweight migration), or a manual mapping model
  • Permission to attempt to perform an automatic migration (for a lightweight migration)

It is therefore absolutely essential that you never make changes to the managed object model for a released version of an app. That is, if your app is already in the App Store, don’t change a single thing in that version of the managed object model.

Solution for the Crash while update an application from the app store:

Create a new version of the managed object model! This reminds me to mention some other best practices to adopt when working with Core Data:

  • Create a new model version for every release version of an app
  • Keep a copy of every release version of an app (you’re already doing this, right?)
  • Keep a copy of every release version backing SQLite store containing suitable test data

Migrations can handle the following changes:

  • Adding or removing an entity, attribute, or relationship
  • Making an attribute non-optional with a default value
  • Making a non-optional attribute optional
  • Renaming an entity or attribute using a renaming identifier

Getting Started:

Open .m file containing core data related code and add the following code immediately after
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

[code language=”objc”]
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES
};
[/code]

Change the next line to pass the options dictionary you just created to
addPersistentStoreWithType:configuration:URL:options:error:

[code language=”objc”]
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL options:options error:&error]) {
[/code]


Screen Shot 2015-03-15 at 9.15.39 PM

Run your app and check out its working fine. Congratulations! You just successfully performed a Core Data migration.

FOUND THIS USEFUL? SHARE IT

comments (1 “CoreData Migration (Versioning of CoreData)”)

Leave a Reply

Your email address will not be published. Required fields are marked *