Skip to content

Commit b063671

Browse files
committed
Merge pull request #231 from firstobjective/master
* Fixed issue where having equivalent models when performing a lightw…
2 parents 663e392 + 392644a commit b063671

File tree

1 file changed

+29
-19
lines changed

1 file changed

+29
-19
lines changed

Incremental Store/EncryptedStore.m

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -698,28 +698,38 @@ - (BOOL)loadMetadata:(NSError **)error {
698698
NSDictionary *options = [self options];
699699
if ([[options objectForKey:NSMigratePersistentStoresAutomaticallyOption] boolValue] &&
700700
[[options objectForKey:NSInferMappingModelAutomaticallyOption] boolValue]) {
701+
NSManagedObjectModel *newModel = [[self persistentStoreCoordinator] managedObjectModel];
702+
703+
// check that a migration is required first:
704+
if ([newModel isConfiguration:nil compatibleWithStoreMetadata:metadata]){
705+
return YES;
706+
}
707+
708+
// load the old model:
701709
NSMutableArray *bundles = [NSMutableArray array];
702710
[bundles addObject:[NSBundle mainBundle]];
703-
NSManagedObjectModel *oldModel = [NSManagedObjectModel
704-
mergedModelFromBundles:bundles
705-
forStoreMetadata:metadata];
706-
NSManagedObjectModel *newModel = [[self persistentStoreCoordinator] managedObjectModel];
711+
NSManagedObjectModel *oldModel = [NSManagedObjectModel mergedModelFromBundles:bundles
712+
forStoreMetadata:metadata];
713+
707714
if (oldModel && newModel) {
708715

709-
if (![oldModel isEqual:newModel]) {
710-
// run migrations
711-
if (![self migrateFromModel:oldModel toModel:newModel error:error]) {
712-
return NO;
713-
}
714-
715-
// update metadata
716-
NSMutableDictionary *mutableMetadata = [metadata mutableCopy];
717-
[mutableMetadata setObject:[newModel entityVersionHashesByName] forKey:NSStoreModelVersionHashesKey];
718-
[self setMetadata:mutableMetadata];
719-
if (![self saveMetadata]) {
720-
if (error) { *error = [self databaseError]; }
721-
return NO;
722-
}
716+
// no migration is needed if the old and new models are identical:
717+
if ([[oldModel entityVersionHashesByName] isEqualToDictionary:[newModel entityVersionHashesByName]]) {
718+
return YES;
719+
}
720+
721+
// run migrations
722+
if (![self migrateFromModel:oldModel toModel:newModel error:error]) {
723+
return NO;
724+
}
725+
726+
// update metadata
727+
NSMutableDictionary *mutableMetadata = [metadata mutableCopy];
728+
[mutableMetadata setObject:[newModel entityVersionHashesByName] forKey:NSStoreModelVersionHashesKey];
729+
[self setMetadata:mutableMetadata];
730+
if (![self saveMetadata]) {
731+
if (error) { *error = [self databaseError]; }
732+
return NO;
723733
}
724734

725735
} else {
@@ -729,7 +739,7 @@ - (BOOL)loadMetadata:(NSError **)error {
729739
*error = [NSError errorWithDomain:EncryptedStoreErrorDomain code:EncryptedStoreErrorMigrationFailed userInfo:userInfo];
730740
}
731741
return NO;
732-
}
742+
}
733743
}
734744

735745
}

0 commit comments

Comments
 (0)