У меня проблема с легким переносом при переносе из хранилища, который определяется двумя отдельными файлами xcdatamodel.
В версии 1.0 моего приложения у меня были модели, выпущенные в модель аналитики, модель-A и все остальное в модели-B. При компиляции модели группируются вместе, и все происходит плавно.
При работе над новой версией 1.1 я обновил модель-B, добавив новую модель модели в модель-B и установив ее как активную.
Проблема возникает при обновлении с 1.0 до 1.1. Похоже, что Core Data проверяет хранилище моделей на диске (созданное по версии 1.0) и ищет модель, которая ее описывает, но не может найти модель SINGLE, которая определяет весь магазин (модель-A охватывает только аналитику, а покрытия модели-B все остальное), поэтому он выдает ошибку "Ошибка поиска для источника".
Кто-нибудь нашел решение для разделения моделей, но все же позволяет обновлять + облегченные миграции для работы без лишних хлопот по определению пользовательских миграций?
Вот фрагмент кода, используемый для загрузки моделей:
NSArray *modelNames = [NSArray arrayWithObjects:@"model-A", @"model-B", nil];
NSMutableArray *models = [NSMutableArray array];
for (NSString *name in modelNames)
{
LogInfo(@"loading model %@", name);
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"momd"];
NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease];
[models addObject:model];
}
// combine all the separate models into one big one
objectModel = [[NSManagedObjectModel modelByMergingModels:models] retain];
NSURL *documentsDirectory = [NSURL fileURLWithPath:[SuperFileManager documentsDirectory] isDirectory:YES];
NSURL *storeURL = [documentsDirectory URLByAppendingPathComponent:@"database.sqlite"];
NSError *error = nil;
coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:options
error:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}