If we implement the selector -mergeValueForKey:fromManagedObject:, and not -mergeValuesForKeysFromManagedObject:, the enumeration occurs over the keys provided by
+managedObjectKeysByPropertyKey.
- (void)mergeValuesOfModel:(id<MTLManagedObjectSerializing>)model forKeysFromManagedObject:(NSManagedObject *)managedObject {
if ([model respondsToSelector:@selector(mergeValuesForKeysFromManagedObject:)]) {
[model mergeValuesForKeysFromManagedObject:managedObject];
} else if ([model respondsToSelector:@selector(mergeValueForKey:fromManagedObject:)]) {
[[model.class managedObjectKeysByPropertyKey] enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *managedObjectKey, BOOL *stop) {
[self mergeValueOfModel:model forKey:key fromManagedObject:managedObject];
}];
}
}
It seems like this is not the expected behavior. Shouldn't it call -managedObjectKeyForKey: to ensure that it includes default mappings? Another possibility is to just construct the _managedObjectKeysByPropertyKey by utilizing this method in the initializer.
If this does seem incorrect, I'm happy to work on a patch for the preferred fix.