This is explained under "Creating the Managed Object Model" of Apple's Core Data Utility Tutorial. In general, once you have a reference to a managed object model, you can use the NSEntityDescription
and NSAttributeDescription
classes to customize the entities and their attributes in the managed object model.
Note, however, that in most cases once you modify a managed object model it will no longer be compatible with existing persistent data stores, meaning that you will then have to migrate data from your old persistent store to your new one. This is definitely not an endeavor to be taken lightly.
Of course, as mentioned in the comments, Core Data can also migrate data automatically, a process known as lightweight migration. In general, though, to do so
Core Data needs to be able to find the
source and destination managed object
models itself at runtime. (Core Data
searches the bundles returned by
NSBundle
’s allBundles
and
allFrameworks
methods.) It must then
analyze the schema changes to
persistent entities and properties and
generate an inferred mapping model.
For Core Data to be able to do this,
the changes must fit an obvious
migration pattern, for example:
- Simple addition of a new attribute
- A non-optional attribute becoming optional
- An optional attribute becoming non-optional, and defining a default value
Does this fit your use case, or do you want to allow your users to change the managed object model in ways that would make lightweight migration impossible?
In any case, I highly recommend that you read through the following documents before you try to allow your users to modify Core Data models.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…