Sono stato in grado di risolvere questo problema utilizzando le configurazioni. Dal momento che il Magical Record invia sempre null
per il parametro di configurazione, sono andato a pezzi setupCoreDataStackWithAutoMigratingSqliteStoreNamed
e sostituito con un metodo che supporta più configurazioni.
Poiché il Magical Record fa un buon lavoro di gestione delle migrazioni automatiche, prima chiamo il numero setupCoreDataStackWithAutoMigratingSqliteStoreNamed
, seguito da cleanup, quindi fornisco il mio codice sostitutivo.
Ho un modello a oggetti con i miei oggetti seme dati assegnati alla configurazione "Seed" e agli oggetti utente assegnati alla configurazione "Utente". Magical Record è già stato inizializzato in modo da poter eseguire automaticamente la migrazione, se necessario.
+(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];
}
Inoltre, MR 3.0 ha stack simultanei che possono risolvere il problema una volta eseguito.
fonte
2014-06-03 19:04:51
Ciao @Ron, quale negozio passi a setupCoreDataStackWithAutoMigratingSqliteStoreNamed come ne hai due? Quello senza seme? – DAN