SpokaneDude
SpokaneDude

Reputation: 4984

How do I set up Core Data lightweight migration using MagicalRecord?

I have hit a brick wall trying to setup lightweight migration of Core Data using MagicalRecord. I have looked at all of the posts on this subject, using Google and SO. I understand how the persistentStoreCoordinator works and what the settings I am trying to make also do.

Here's my code:

AppDeligate.h

NSPersistentStoreCoordinator *persistentStoreCoordinator;

AppDelegate.m

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator != nil) {
    return persistentStoreCoordinator;
}

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"saori.sqlite"]];

// handle db upgrade
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                         [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
    
    // Handle error
}

return persistentStoreCoordinator;

}

I'm getting the following errors, which I understand; what I don't know is where are these objects (I have looked in my app, and found nothing):

No visible @interface for 'AppDelegate' declares the selector 'applicationDocumentsDirectory' and

No visible @interface for 'AppDelegate' declares the selector 'managedObjectModel'

I have already created the stores:

xcdatamodeld

Most, if not all of the code I have looked at is similar; I don't know if MagicalRecord handles this for me or not because I can't find any docs that would indicate how to do this using MR. My question is: what do I have to do to make this work?

Upvotes: 6

Views: 6796

Answers (3)

Whitney Foster
Whitney Foster

Reputation: 721

Make sure you check all of these things:

In your AppDelegate.m file:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    [MagicalRecord setupAutoMigratingCoreDataStack];
    ...
}

If you haven't versioned your model already:

  • Select your data model

Select your data model

  • Editor -> Add Model Version

    enter image description here

  • Name the new version, Finish

enter image description here

  • There should be two versions now. Select the file as shown.

enter image description here

  • Change the Model Version to your new version

enter image description here

  • The new version should be checked now

enter image description here

Upvotes: 8

PranayRiktam
PranayRiktam

Reputation: 61

As of my understanding of the question, i suggest you to use this

[MagicalRecord setupAutoMigratingCoreDataStack]

If you have not changed the model version, change it to new model created from the old model

Upvotes: 6

Wain
Wain

Reputation: 119031

The whole point of MagicalRecord is that this is managed for you:

[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:####];

Check the docs about the Core Data stack setup here.

Upvotes: 13

Related Questions