IPhone Core Data Lightweight Migration: Unable to merge models

I just started with the basic data of the iPhone, and I ran into the problem of lightweight migration.

  • I added two new fields to my old model.
  • Regenerated Model Class Files
  • Made a new version of the model as the current version
  • The following code is added in AppDelegate in the created template

    NSDictionary * options = [Dictionary NSDictionaryWithObjectsAndKeys: [NSNumberWithBool: YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumberWithBool: YES], NSInferMappingModelAutomaticallyOption, nil];

    if (! [persistentStoreCoordinator_ addPersistentStoreWithType: NSSQLiteStoreType configuration: nil URL: storeURL options: options error: & error]) {

  • Then, finally, I did a clean build before running the application.

I get the following error when the application crashes ...

The operation couldn't be completed. (Cocoa error 134140.)" UserInfo=0x622b350 {reason=Can't find or automatically infer mapping model for migration 

Now for debugging, I added the following code ...

  NSError *error = nil; NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:NSSQLiteStoreType URL:storeURL error:&error]; if (!sourceMetadata) { NSLog(@"sourceMetadata is nil"); } else { NSLog(@"sourceMetadata is %@", sourceMetadata); } 

The following result is displayed ...

 2011-01-20 18:18:41.018 MyApp[4438:207] sourceMetadata is { NSPersistenceFrameworkVersion = 248; NSStoreModelVersionHashes = { Fugitive = <e33370b6 e7ca3101 f91d2595 1e8bfe01 3e7fb4de 6ef2a31d 9e50237b b313d390>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( ); NSStoreType = SQLite; NSStoreUUID = "E711F65F-3C5A-4889-872B-6541E4B2863A"; "_NSAutoVacuumLevel" = 2; } 

I checked the application suite> MyApp.momd> File VersionInfo.plist

he got the following contents ...

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>NSManagedObjectModel_CurrentVersionName</key> <string>MyApp 2</string> <key>NSManagedObjectModel_VersionHashes</key> <dict> <key>MyApp</key> <dict> <key>Fugitive</key> <data> 4zNwtufKMQH5HSWVHov+AT5/tN5u8qMdnlAje7MT05A= </data> </dict> <key>MyApp 2</key> <dict> <key>Fugitive</key> <data> N58Lf4BNpACzrsHAb1+BQImgjsBZ+u5G0wGUyt84+Ec= </data> </dict> </dict> </dict> </plist> 

What am I missing here?

UPDATE The problem turned out to be a default attribute that I missed in the model.

+3
iphone core-data core-data-migration mapping-model
Jan 20 '11 at 10:21
source share
1 answer

You can try to get Core Data to display a display model:

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 

If the changes in your model were trivial, then Core Data can output a matching model. If this fails, you will probably need to create a mapping model (and return to the options you are currently using).

Matching models are easy to create. Remember that if you change the data model, you will also need to update the display.

You might want to check out this SO post .

+3
Jan 20 '11 at 10:01
source share



All Articles