Ich habe eine dokumentbasierte Core Data-Anwendung, die so funktioniert wie sie ist. Ich möchte Unterstützung für einen globalen dauerhaften Speicher hinzufügen, um eine Bibliothek von Elementen zu halten.Document-Based-Anwendung für Kerndaten mit globalem beständigen Speicher
Ich habe die meisten relevanten Dokumente gelesen und verstehe, dass ich Konfigurationen in den verwalteten Objektmodellen verwenden sollte. Ich habe zwei Konfigurationen definiert: "DocumentConfiguration" und "LibraryConfiguration". Die Entitäten in der Dokumentkonfiguration befinden sich nur in der Dokumentkonfiguration, und die Entitäten in der Bibliothekskonfiguration befinden sich nur in der Bibliothekskonfiguration - d. H. Keine Überlappung.
Die Dokumentation sagt dann "Sie verwenden dieses Modell dann, wenn Sie einen Koordinator erstellen". Aber ich erstelle meinen eigenen permanenten Speicherkoordinator nicht wirklich, da ich den standardmäßigen NSPersistentDocument-Koordinator verwende.
Ein paar Fragen über die besten, wie ich haben könnte, um fortzufahren und zu helfen, Missverständnisse aufklären:
A. Würde ich die NSPersistentStoreCoordinator im NSPersistentDocument erhalten und dann einen neuen persistenten Speicher, um es entlang der Linien von:
NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType
configuration:@"LibraryConfiguration"
URL:url
options:nil
error:&error];
ich denke, dass dies ein Problem sein kann, weil ich nicht die andere Konfigurationsdefinition („DocumentConfiguration“) in der NSPersistentDocument der persistenten Speicher Koordinator zur Verfügung gestellt habe, als ich den von NSPersistentDocument bereitgestellten Standard bin mit. Ich nehme an, es würde wahrscheinlich Null verwenden, wenn die Zeit gekommen ist, das Dokument zu speichern. Und wenn ja, wäre das ein Problem? D.h., wie würde der Koordinator wissen, welcher persistente Speicher eine Entität mit einer gegebenen Konfigurationsdefinition speichern soll, wenn dieselben Konfigurationen nicht für alle persistenten Speicher definiert sind (in diesem Fall zwei)? Kann ich die Konfiguration (auf "DocumentConfiguration") des persistenten Speichers von NSPersistentDocument festlegen, bevor er erstellt/gespeichert wurde? Aus den NSPersistentDocument docs:
Saving a new document adds a store of the default type with the chosen URL and invokes save: on the context. For an existing document, a save just invokes save: on the context.
B. Wäre es besser, meine eigenen NSPersistentStoreCoordinator und NSManagedObjectContext Instanzen zu erstellen, die Addition der beiden persistent speichert mit Konfigurationen definiert und dann die NSPersistentDocument diese NSPersistentStoreCoordinator und NSManagedObjectContext Instanzen verwenden machen, und kostenlos die Alten? Wenn ja, wie würde ich die URL für das NSPersistentDocument für die Methode addPersistentStoreWithType: ... angeben? Es scheint, dass diese URL nur bekannt ist, wenn das unbenannte Dokument gespeichert wurde. (Dies wird getestet, es scheint keinen temporären persistenten Speicher zu geben (über die Methode persistantStores im persistenten Speicherkoordinator), bis das Dokument zum ersten Mal gespeichert wird.
C. Oder wäre es besser, NSPersistentDocument alleine zu lassen und meine eigene NSPersistentStoreCoordinator-Instanz zu erstellen, die ich ausschließlich für das Bibliotheksobjekt des persistenten Bibliotheksspeichers und des verwalteten Bibliotheksobjekts verwende? Die Dokumentation besagt, dass mehrere Instanzen von NSPersistentStoreCoordinator in Multithread-Core Data-Anwendungen verwendet werden sollten, aber ich benötige keine Unterstützung für Multithread-Core-Daten. Ist es wünschenswert, zwei Instanzen von NSPersistentStoreCoordinator zu haben - einen für die Bibliothek und einen für Dokumente (Intuition sagt, dass dies nicht notwendig und wahrscheinlich nicht der richtige Ansatz ist)?
Irgendwelche Vorschläge?
Die Dokumentation für NSManagedObjectContext enthält jedoch nur Methoden zum Abrufen/Festlegen des persistenten Speicherkoordinators, nicht zum Hinzufügen eines. Das heißt, Sie können nicht mehr als einen beständigen Speicherkoordinator mit einem verwalteten Objektkontext verknüpfen. (Der permanente Speicherkoordinator, der einem Kontext für verwaltete Objekte zugeordnet ist, kann mehrere persistente Speicher verwalten, aber das ist anders). – Dalmazio
Entschuldigung, ich habe falsch geschrieben. Mit 'addPersistentStoreWithType 'fügen Sie die mehreren Speicher tatsächlich dem persistenten Speicherkoordinator hinzu: configuration: URL: options: error:' – TechZen
Okay, aber es gibt immer noch das Problem für diese Situation (die Integration eines globalen persistenten Speichers und des Speichers eines dokumentenbasierten Anwendung) des Aufrufs von addPersistentStoreWithType: ... auf dem Persistent-Store-Koordinator von NSPersistentDocument, wie in A) oben beschrieben. – Dalmazio