У меня есть приложение для iPhone, которое использует CoreData. Недавно я внес небольшие изменения в модель данных, и теперь каждый раз, когда приложение открывается, я получаю сообщение об ошибке «Не удается найти модель для хранилища исходного кода».
У меня есть 2 версии модели данных, и единственными изменениями, которые я сделал, были некоторые дополнения некоторых полей. Я следовал руководству здесь , которое работало изначально, а затем только сегодня, после добавления некоторых дополнительных полей, оно ломается. Все дополнительные поля помечены как дополнительные и имеют значения по умолчанию. Код миграции указан ниже:
NSURL *storeUrl = [NSURL fileURLWithPath:[[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"xxx.sqlite"]];
// migration options
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
...
}
Управляемая модель объекта успешно создана здесь:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
NSString *path = [[NSBundle mainBundle] pathForResource:@"DataModelName" ofType:@"momd"];
NSURL *momURL = [NSURL fileURLWithPath:path];
managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL];
return managedObjectModel;
}
Я отследил проблему до несоответствия в версии для 1 объекта. Возникающая ошибка включает в себя следующее:
MyEntityName = <cc1456b7 b12d0d05 21930308 94ccc078 27a6c345 8847c738 e3a9ae7e 0be9535d>;
но хеш в VersionInfo.plist в комплекте приложений:
MyEntityName = <fede6b59 462442d1 8fc98226 b9f8f745 3250dabd ee188248 cb97b1d0 8a74eef3>;
В списке VersionInfo.plist нет других сущностей с хешем <cc1456b7....>
.