Mam problem z wykonaniem niewielkiej migracji podczas migracji ze sklepu zdefiniowanego przez dwa oddzielne pliki xcdatamodel.Dane podstawowe - migracje lekkie i wielordzeniowe pliki modeli danych (xcdatamodel)
W wersji 1.0 mojej aplikacji miałem modele podzielone na model analityczny, model A i wszystko inne w modelu B. Podczas kompilacji modele były pogrupowane i wszystko przebiegało sprawnie.
Podczas pracy nad nową wersją 1.1 zaktualizowałem model B, dodając nową wersję modelu do modelu B i ustawiając tę nową wersję jako aktywną.
Problem pojawia się podczas aktualizacji z wersji 1.0 do wersji 1.1. Wygląda na to, że Core Data sprawdza skład modelu na dysku (utworzony przez wersję 1.0) i szuka modelu, który go opisuje, ale nie może znaleźć modelu POJEDYNCZEGO, który definiuje cały sklep (model A obejmuje tylko analitykę i obejmuje model B) wszystko inne), więc generuje błąd "Nie można znaleźć modelu dla magazynu źródłowego".
Czy ktoś znalazł rozwiązanie pozwalające oddzielić modele, ale nadal pozwala na uaktualnienia i lekkie migracje do pracy bez dodatkowych problemów związanych z definiowaniem migracji niestandardowych?
Oto fragment kodu używany do ładowania modeli:
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();
}
Jakieś aktualizacje w tej sprawie? – codepushr
@codingrogue - niestety nie. Zespół, nad którym pracowałem, porzuciłem przy użyciu Core Data i przełączyłem się na programowanie Android. Przepraszam. :/ – Mark