I’ve looked all over for an answer, but it seems like I’m missing something obvious. I’ve made a rather complex Core Data app before, but the answer to this question has eluded me for the past few months.
Here’s the problem:
1) I have about 20 entities in my Model.
2) Some of these entities have user-editable objects, others have pre-loaded data
3) I would like to know if it’s possible to update the pre-loaded entities with each new app update.
I know I can do this the “manual” way by specifying each updated attribute, but this is way too cumbersome. I want to just update all the pre-loaded entities once the user opens an updated version of the app. I don’t want to touch the user-data.
Thank you so much for your help!
You could have a version number field in your schema which you can use to associate a version number with each record. If it has a value, it’s a preload. Then for the preload stuff just insert the new data when the app opens, and then ignore/delete the old. Seems simple enough.
UPDATE:
The other alternative I believe is to separate your preloaded data into an entirely different data store. I have an app wherein I do this by delivering my preloaded data via a custom SQLite file, and user data in a CoreData store. I can do this because my preloaded data is read-only, which saves me from needing to copy the SQLite file into the documents directory. What this means is that, at every update, the new data file automatically overwrites the old by virtue of the app installation. The user’s data is maintained as it should be.
Of course if your preloaded data is not read-only, then there’s no way around the need to write code. In this case there’s not much I can do for you, not having any more details about your problem.