2012-09-07 14 views
10

En una aplicación de iOS, me gustaría usar un NSPersistentStoreCoordinator con una subclase NSIncrementalStore, para recuperar datos de una API REST, pero también con una tienda SQLite, para guardar en el disco. Sin embargo, si agrego ambos tipos de tiendas persistentes a mi coordinador, llamar al save: en el contexto de mi objeto gestionado no tiene ningún efecto. Si solo agrego el único almacén persistente, no del tipo para mi subclase NSIcrementalStore, entonces el guardado funciona según lo previsto.NSPersistentStoreCoordinator con dos tipos de tiendas persistentes?

¿Hay alguna forma de lograr esta funcionalidad?

Respuesta

10

La mejor solución en mi experiencia es tener múltiples contextos de objetos gestionados, cada uno con su propio modelo.

Sin embargo, hay una manera de lograr lo que quiere:

// create the store coordinator 
NSPersistentStoreCoordinator *storeCoordinator = [[NSPersistentStoreCoordinator alloc] init]; 
// create the first store 
NSPersistentStore *firstStore = [storeCoordinator addPersistentStoreWithType: NSIncrementalStore configuration:nil URL:urlToFirstStore options:optionsForFirstStore error:&error]; 
// now create the second one 
NSPersistentStore *secondStore = [storeCoordinator addPersistentStoreWithType:NSSQLiteStore configuration:nil URL:urlToSecondStore options:optionsForSecondStore error:&error]; 

// Now you have two stores and one context 
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init]; 
[context setPersistentStoreCoordinator:storeCoordinator]; 

// and you can assign your entities to different stores like this 
NSManagedObject *someObject = [[NSManagedObject alloc] initWithEntity:someEntity insertIntoManagedObjectContext:context]; 
// here the relevant part 
[context assignObject:someObject toPersistentStore:firstStore]; // or secondStore .. 

También debe comprobar estos enlaces para obtener una mejor idea acerca de cómo funciona la base de datos:

Core Data Programming Guide - Persistent Store Coordinator

SO: Two persistent stores for one managed object context - possible?

SO: Can two managed object context share one single persistent store coordinator?

Compruebe también el comentario de TechZen en el segundo link sobre las configuraciones y leer sobre ello aquí:

Core Data Programming Guide - Configurations

y aquí es un buen tutorial para gestionar dos contextos de objetos:

Multiple Managed Object Contexts with Core Data

+0

Gracias, configuré todo correctamente gracias a esos recursos. Sin embargo, queda una pregunta: tengo múltiples contextos de objetos administrados, pero un único coordinador de tienda persistente con dos tiendas persistentes. Cuando realizo una solicitud de búsqueda en mi contexto de objeto gestionado principal, solo deseo que se asocie con mi tienda SQLite persistente, y no use mi subclase NSIncrementalStore. ¿Cómo logro esto? –

+0

Parece que es '- [NSFetchRequest setAffectedStores:]'. –

+0

@JordanKay De nada. Lamento no haber respondido antes tu pregunta sobre la solicitud de búsqueda, hace sol y calor aquí, así que estaba de fiesta :). ¡Pero parece que lo hiciste bien! [NSFetchRequest setAffectedStores:] es. – iska

Cuestiones relacionadas