2012-09-07 7 views
10

In einer iOS App möchte ich eine NSPersistentStoreCoordinator mit einer Unterklasse NSIncrementalStore verwenden, um Daten aus einer REST-API, aber auch mit einem SQLite-Speicher, auf die Festplatte zu speichern. Wenn ich beide Arten von persistenten Speichern zu meinem Koordinator hinzufüge, hat das Aufrufen von save: auf meinem verwalteten Objektkontext keine Auswirkung. Wenn ich nur den einen persistenten Speicher hinzufüge und nicht den Typ für meine Unterklasse , dann funktioniert das Speichern wie beabsichtigt.NSPersistentStoreCoordinator mit zwei Arten persistenter Speicher?

Gibt es eine Möglichkeit, diese Funktionalität zu erreichen?

Antwort

10

Die beste Lösung in meiner Erfahrung ist, mehrere verwaltete Objektkontexte zu haben, von denen jeder sein eigenes Modell hat.

Allerdings gibt es eine Möglichkeit, zu erreichen, was Sie wollen:

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

Sie sollten auch diese Links überprüfen eine bessere Vorstellung darüber zu bekommen, wie Core Data funktioniert:

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?

auch den Kommentar von TechZen in der zweiten Verbindung zu Konfigurationen überprüfen und darüber hier lesen:

Core Data Programming Guide - Configurations

und hier ist ein nettes Tutorial zu verwalten zwei Objekt Kontexte:

Multiple Managed Object Contexts with Core Data

+0

Danke, dank dieser Ressourcen habe ich alles richtig eingerichtet. Allerdings bleibt eine Frage offen: Ich habe mehrere Kontexte für verwaltete Objekte, aber einen einzigen persistenten Speicherkoordinator mit zwei persistenten Speichern. Wenn ich eine Abrufanforderung für meinen Hauptkontext des verwalteten Objekts durchführe, möchte ich nur, dass sie meinem persistenten SQLite-Speicher zugeordnet ist, und nicht meine NSIncrementalStore-Unterklasse. Wie erreiche ich das? –

+0

Sieht aus wie '- [NSFetchRequest setAffectedStores:]'. –

+0

@ JordanKay Gern geschehen. Entschuldigung, ich habe deine Frage über die Abrufanfrage nicht früher beantwortet, es ist sonnig und heiß hier, also habe ich gefeiert :). Aber es sieht so aus als hättest du es richtig gemacht! [NSFetchRequest setAffectedStores:] ist es. – iska

Verwandte Themen