2012-09-07 11 views
10

In un'app iOS, vorrei utilizzare un NSPersistentStoreCoordinator con una sottoclasse NSIncrementalStore per il recupero dei dati da un'API REST, ma anche con un archivio SQLite, da salvare su disco. Se aggiungo entrambi i tipi di negozi persistenti al mio coordinatore, tuttavia, chiamare save: sul mio contesto dell'oggetto gestito non ha alcun effetto. Se aggiungo solo un archivio permanente, non del tipo per la sottoclasse NSIcrementalStore, il salvataggio funziona come previsto.NSPersistentStoreCoordinator con due tipi di negozi persistenti?

Esiste un modo per ottenere questa funzionalità?

risposta

10

La soluzione migliore nella mia esperienza è quella di avere più contesti di oggetti gestiti, ciascuno con il proprio modello.

Tuttavia, c'è un modo per ottenere ciò che si vuole:

// 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 .. 

Si dovrebbe anche controllare questi link per avere una migliore idea di come funziona Core Data:

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?

di controllare anche la commento di TechZen nel secondo collegamento sulle configurazioni e leggere su di esso qui:

Core Data Programming Guide - Configurations

ed ecco un bel tutorial per gestire due contesti oggetto:

Multiple Managed Object Contexts with Core Data

+0

Grazie, ho impostato tutto correttamente grazie a quelle risorse. Tuttavia, rimane una domanda: ho più contesti di oggetti gestiti, ma un unico coordinatore di negozio permanente con due negozi persistenti. Quando eseguo una richiesta di recupero sul mio contesto oggetto gestito principale, voglio solo che sia associato al mio archivio persistente SQLite e non utilizzi la sottoclasse NSIncrementalStore. Come ottengo questo? –

+0

Sembra che sia '- [NSFetchRequest setAffectedStores:]'. –

+0

@JordanKay Prego. Scusa se non ho risposto alla tua domanda sulla richiesta di recupero prima, c'è il sole e caldo qui, quindi ho festeggiato :). Ma sembra che tu abbia capito bene! [NSFetchRequest setAffectedStores:] lo è. – iska

Problemi correlati