So a while ago, I wrote on how I discovered the existence of this thing call Core Data migrations, by having my app crash when I added a new entity to my core data model. So the solution to that is actually not very hard, the only issue I had was that a majority of the solutions out there, deal with it in apps built with Objective-C and I needed a solution in Swift. I am not very surprised by this given how new Swift is.
I have defined the problem in mode detail in one of my previous posts, its a small post and I would suggest having a read of it to better understand the problem. Anyway in a nutshell, I was working on my iOS app which used Core data, so I added an entity to my data model, deployed the app, it was saving and retrieving data and it was all working fine. Then I added another entity to my data model and then the app crashed. So then I was looking for a solution to why my app was crashing and what I can do to fix it.
Once again in a nutshell the solution involves performing what is called a lightweight migration and this video does a pretty good job of explaining how to add model versions. However it presents the solution in an app built using Objective-C and I was/am building my app using Swift. Now the solution presented in that video is pretty much the same for an app written using Swift, well everything except the last part where we ask our AppDelegate to automatically migrate persistent data stores.
If the Xcode project for the app has been creating using Core Data, you will see the initialisation of persistentStoreCoordinator in the AppDelegate. In it there will be this line
if coordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error)
var options: NSDictionary = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption:true]
The attached screenshot shows, how I accomplished this little Xcode project I made just to get the hang of core data migrations.
|Have a look at the variable options of type NSDictionary and how it is used|