Pude resolver este problema utilizando configuraciones. Como Magical Record siempre envía null
para el parámetro de configuración, rompí setupCoreDataStackWithAutoMigratingSqliteStoreNamed
y lo sustituí por un método que admite múltiples configuraciones.
Como Magical Record hace un buen trabajo al manejar las migraciones automáticas, primero llamo al setupCoreDataStackWithAutoMigratingSqliteStoreNamed
, le sigo la limpieza y luego proporciono el código de reemplazo.
Tengo un modelo de objeto con mis objetos de datos semilla asignados a la configuración "Semilla" y objetos de usuario asignados a la configuración de "Usuario". Magical Record ya se ha inicializado para que pueda migrar automáticamente si es necesario.
+(void) RB_setupMultipleStores:(NSString *) seedStoreName userStore:(NSString *) userStoreName
/* change persistent store to one with multiple configurations. Assumes Magical Record is initialized. */
{
NSError * error= nil;
[MagicalRecord cleanUp];
NSManagedObjectModel * model = [NSManagedObjectModel MR_defaultManagedObjectModel];
NSURL *seedURL = [NSPersistentStore MR_urlForStoreName:[seedStoreName stringByAppendingString:@".sqlite"]];
NSPersistentStoreCoordinator * coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,
nil];
NSPersistentStore * seedStore =[coordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"Seed"
URL:seedURL
options:options
error:&error];
if (!seedStore || error)
{
NSLog(@"Error setting up seed store:%@ for %@", [error localizedDescription], seedURL);
exit(-1);
}
NSURL *userURL = [NSPersistentStore MR_urlForStoreName:[userStoreName stringByAppendingString:@".sqlite"]];
NSPersistentStore * userStore = [coordinator
addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"User"
URL:userURL
options:options
error:&error];
if (!userStore || error)
{
NSLog(@"Error setting up user store:%@ for %@", [error localizedDescription], userURL);
exit (-1);
}
[NSPersistentStoreCoordinator MR_setDefaultStoreCoordinator:coordinator];
[NSManagedObjectContext MR_initializeDefaultContextWithCoordinator:coordinator];
}
Además, MR 3.0 tiene pilas concurrentes que pueden resolver el problema una vez que se ha completado.
Hola @Ron, ¿qué tienda pasas a setupCoreDataStackWithAutoMigratingSqliteStoreNamed ya que tienes dos? ¿El que no tiene semilla? – DAN