Search code examples
core-datamigrationiclouduimanageddocument

UIManagedDocument migrate data model


I am working on an iPhone app that uses a subclass of UIManagedDocument and stores its documents on iCloud.

It was all working fine until I changed my core data model / scheme (adding a new model version - like I had several times in the past few weeks). I added a new property and changed the data type of one of the existing properties.

Now when I run my app I don't seem to be able to load my documents with UIManagedDocument's -openWithCompletionHandler:. I can create new documents and read/write those. If I change the data model version back 1 then I am able to read the existing docs, but not the new ones.

From what I understand I am only do lightweight migrations to the data model and UIManagedDocument is supposed to handle that right?

Any advice would be greatly appreciated!


Solution

  • In a subclass of UIManagedDocument you may want to try overriding managedObjectModel like so:

    - (NSManagedObjectModel *)managedObjectModel
    {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"<ModelNameHere>" ofType:@"momd"];
        NSURL *momURL = [NSURL fileURLWithPath:path];
        NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
    
        return managedObjectModel;
    }