The model used to open the store is incompatible with the one used to create the store The model used to open the store is incompatible with the one used to create the store ios ios

The model used to open the store is incompatible with the one used to create the store


Deleting the app is sometimes not the case! Suggest, your app has already been published! You can't just add new entity to the data base and go ahead - you need to perform migration!

For those who doesn't want to dig into documentation and is searching for a quick fix:

  1. Open your .xcdatamodeld file
  2. click on Editor
  3. select Add model version...
  4. Add a new version of your model (the new group of datamodels added)
  5. select the main file, open file inspector (right-hand panel)
  6. and under Versioned core data model select your new version of data model for current data model
  7. THAT'S NOT ALL ) You should perform so called "light migration".
  8. Go to your AppDelegate and find where the persistentStoreCoordinator is being created
  9. Find this line if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
  10. Replace nil options with @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} (actually provided in the commented code in that method)
  11. Here you go, have fun!

P.S. This only applies for lightweight migration. For your migration to qualify as a lightweight migration, your changes must be confinedto this narrow band:

  • Add or remove a property (attribute or relationship).
  • Make a nonoptional property optional.
  • Make an optional attribute nonoptional, as long as you provide a default value.
  • Add or remove an entity.
  • Rename a property.
  • Rename an entity.

For Swift 4

coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true])


Remove the app from the simulator and perform a clean on your project. That should clear those issues up. Make sure that you are not running in the debugger when you delete the app or else it won't actually delete it properly.

If you want to be sure its gone, check this directory Users/INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator/ for your app's folder, under the version you're running.

Note: This is for development only. For production, you need to implement some sort of migration. Google "Core Data Migration", with lightweight migration being the simplest.


Just add Options attribute while creating persistentStoreCoordinator in AppDelegate.m file for the core data method as below

OBJECTIVE-C

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator{    if (_persistentStoreCoordinator != nil)    {        return _persistentStoreCoordinator;    }    NSLog(@"persistentStoreCoordinator___");    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];    NSMutableDictionary *options = [[NSMutableDictionary alloc] init];    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];    NSError *error = nil;    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error])    {        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);        abort();    }    NSLog(@"persistentStoreCoordinator___2");    return _persistentStoreCoordinator;}

SWIFT

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {    // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.    // Create the coordinator and store    let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)    let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite")    var failureReason = "There was an error creating or loading the application's saved data."    // MAIN LINE OF CODE TO ADD    let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,                    NSInferMappingModelAutomaticallyOption: true]    do {        try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)    } catch {        // Report any error we got.        var dict = [String: AnyObject]()        dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data"        dict[NSLocalizedFailureReasonErrorKey] = failureReason        dict[NSUnderlyingErrorKey] = error as NSError        let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)        // Replace this with code to handle the error appropriately.        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.        NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")        abort()    }    return coordinator}

It had solved my problem..