Jerry, Using just the mapping model seems okay if your Core Data) Model is simple, but most likely it would bloat over time and the best thing to do would be to customize the migration process. Actually it's not that hard and in fact makes sense.
To start with you create a subclass of NSEntityMigrationPolicy to say MyMigrationPolicy. In your mapping model you have to handle the mapping of say old entity "Foo" whose attribute "Bar" is of type Int16 in old model and Bool in new model. Now in you mapping model specify "MyMigrationPolicy" as the "Custom Policy" for attribute you wish to manage in a custom way. Now implement the method: - (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)inSourceInstance entityMapping:(NSEntityMapping *)inMapping manager:(NSMigrationManager *)inManager error:(NSError **)outError In your MyMigrationPolicy class and deal with only the entities that you're interested in. A sample implementation would look something like: - (BOOL)createDestinationInstancesForSourceInstance:(NSManagedObject *)inSourceInstance entityMapping:(NSEntityMapping *)inMapping manager:(NSMigrationManager *)inManager error:(NSError **)outError { NSManagedObject *newObject; NSEntityDescription *sourceInstanceEntity = [inSourceInstance entity]; if ( [[sourceInstanceEntity name] isEqualToString:@"Foo"] ) { newObject = [NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:[inManager destinationContext]]; NSDictionary *keyValDict = [inSourceInstance committedValuesForKeys:nil]; NSArray *allKeys = [[[inSourceInstance entity] attributesByName] allKeys]; NSInteger i, max; max = [allKeys count]; for (i=0 ; i< max ; i++) { // Get key and value NSString *key = [allKeys objectAtIndex:i]; id value = [keyValDict objectForKey:key]; if ( [key isEqualToString:@"Bar"] ) { [newObject setValue:[NSNumber numberWithBool:[value boolValue]] forKey:key]; } else [newObject setValue:value forKey:key]; } } [inManager associateSourceInstance:inSourceInstance withDestinationInstance:newObject forEntityMapping:inMapping]; return YES; } Thanks, Chaitanya Pandit Architect Expersis Software Inc. On May 4, 2010, at 7:23 AM, Jerry Krinock wrote: > When doing Core Data versioning, when creating a Mapping Model, when writing > Custom Value Expressions, I understand that the syntax to be used is that > described in the Predicate Programming Guide > Predicate Format String Syntax. > > But I can't figure out how to do non-trivial mappings like these... > > Example 1: Old data model attribute type is an Integer16. I want to map > this to a Boolean which is NO if the old value was 0 and YES if != 0. > > Example 2: Old and new data model attribute types are both String. If the > string is "Joe", I want to map it to "Jose"; else, map the original value. > > It seems like the concept of "mapping" should support stuff like this, but I > can't find any such examples. In MigratingDepartmentAndEmployees, all I see > is mapping from one attribute name to another. > > Relations get a complicated expression like this generated automatically: > > FUNCTION($manager, > "destinationInstancesForEntityMappingNamed:sourceInstances:" , > "EmployeeToEmployee", $source.employees) > > but I have no idea where that FUNCTION keyword comes from (it's not listed as > a reserved word in the Predicate Programming Guide). It seems like I should > be able to make my own FUNCTION to implement the stuff I need in my examples. > Is this possible? > > Thanks, > > Jerry Krinock > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > http://lists.apple.com/mailman/options/cocoa-dev/chaitanya%40expersis.com > > This email sent to chaita...@expersis.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com