Können mehrere (zwei) persistent speichert, die verwendet werden mit einem Objekt-Modell, während die Aufrechterhaltung der Beziehungen von der einen zur anderen?
Einführung
Meinem iOS-Projekt wird mit einer Core-Daten persistent zu speichern einem Gewicht von rund 160 MB im SQLite-format. Es gibt eine Tonne von gruppierten Informationen in es, in dem der Benutzer sollte in der Lage sein, um Favoriten zu markieren. Für diese brauche ich (zumindest zum Teil) die Datenbank schreiben Fähigkeiten. Aber natürlich persistent speichert, das Schiff in das Programm-bundle sind by design "nur Lesen".
Wenn Sie möchten, dass der Speicher über den lese-schreib-Fähigkeiten, sollten Sie kopieren, z.B. den app-Ordner "Dokumente". Ich will nicht, dies zu tun, weil dann die app wäre doppelt so groß, während der größte Teil der Datenbank ist schreibgeschützt sowieso. Das wäre eine Verschwendung von Ressourcen.
Mehrere persistent speichert für NSPersistentStoreCoordinator
Dies ist der Grund, warum ich daran gedacht, mit zwei persistent speichert. Die erste wäre die große in die Bündel, und die zweite könnte eine kleine im Ordner "Dokumente" speichern spezieller "Lieblings" - Entitäten mit Beziehungen zu den großen speichern.
Ich weiß, so etwas ist möglich in dieser Hinsicht, aber ich kann nicht finden, die Besonderheiten. Sollte man nur verwenden, mehrere Shops, wenn Sie auch mehrere Objekt-Modelle? Kann ein Objekt-Modell 'verteilt' über zwei persistent speichert? Beim surfen durch die Core Data Programming docs, kann ich keinen echten Bezug dazu, wie diese eingerichtet. Auch Marcus Zarra Buch nicht scheinen, Tauchen Sie ein in dieses Thema:
Es ist möglich, hinzufügen von mehr als einem NSPersistentStore der NSPersistentStoreCoordinator, die nützlich sein können beim Umgang mit Daten, die in mehrere Dateien aufgeteilt. Jedoch, in unserem Beispiel haben wir eine einzelne Datei. (Marcus Zarra: "Core-Daten - apples API für die Persistenz der Daten auf dem Mac OS X" Seite 71)
Die Frage
Wer könnte mir sagen, ob das, was ich denke ist möglich, mit Core Data und mehrere persistent speichert? Und könntest du vielleicht einen Tipp geben, darüber, wie dies zu erreichen? Online - /offline-Ressourcen, die sich mit dem Thema sehr viel zu schätzen.
- Fast würde ich es herausgefunden hat, finden Sie unter stackoverflow.com/questions/10951844/... Beispiel-Projekt
- Du bist overcomplicating it. Kopieren Sie die db aus dem bundle auf den Ordner "library" und mit ihm getan werden.
- Dafür, dass Sie entweder kommentieren eine 2-Jahr-alte Frage oder eine ein-Jahr-alt Kommentar auf diese Frage, dass Sie nicht sehr konstruktiv hier, @Rog. Der app-Datenbank ist nun fast 250 MByte, von denen ich denke, dass seine Nutzer es zu schätzen wissen, die nur einmal dort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist die Antwort ja. @Caleb Punkte an die richtigen Ressourcen, aber bekomme es auf der Arbeit ist immer noch ziemlich umständlich. Ich dachte mir, ich Stelle ein resumé hier:
Für zwei
NSPersistentStore
Instanzen auf das selbe Modell, müssen Sie eine Konfiguration hinzufügen, um Ihr Modell, welches ein string-namens Teilmenge der Entitäten:In das Modell, zu einer Entität, die gehört zur zweiten laden, fügen Sie eine geholt Eigenschaft (
NSFetchedPropertyDescription
für googlability). Dieses etwas ist eine sehr einfache gespeicherte Prozedur, und es könnte so Aussehen:Dann, wenn Sie fügen Sie zu den Läden, die Ihre persistent store coordinator, verwenden Sie die Zeichenfolgen für die
configuration
argument (mehr info über die Möglichkeiten hier):Schließlich, wenn Sie wollen, um von der Einheit, in-store-B auf die Person im store Ein, lösen Sie die abgefragten Eigenschaft, wie Sie auch der Auslöser ein Fehler, der nur durch den Zugriff auf Sie.
Hinweis: Eine geholt-Eigenschaft gibt immer ein NSArray, denn das Prädikat schreiben Sie eine Verbindung können mehrere Ergebnisse. Wenn Sie möchten, zu bekommen, nur eine Entität, konnte Sie etwas wie dies in einer wrapper-Methode des
NSManagedObject
Unterklasse:addPersistentStoreWithType:...
code, den Sie geschrieben, was istoptions
? Ich baute meine app aus einer der Vorlagen, und es sendet lediglichnil
zuoptions:
. EDIT: found itNSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES };
Ja, Sie können mehrere Shops für ein einzelnes Modell, aber Sie können nicht erstellen Sie Beziehungen zwischen Objekten in verschiedenen Geschäften. Suchen Sie für die Cross-Store-Beziehungen Abschnitt in Core Data Programming guide, die besagt im wesentlichen, dass und empfiehlt die Verwendung der abgerufenen Eigenschaften, wenn Sie brauchen, um sich zu beziehen, ein Objekt in ein Geschäft, um ein Objekt in ein anderes.
Einen Gedanken: möglicherweise möchten Sie erstellen verschiedene Geschäfte insgesamt und auch verschiedene persistente Speicherung Koordinatoren für jeden der store. Und dann erstellen Sie verschiedene managed-object-Kontexte für jedes Modell Teil. Lassen Sie uns also sagen, ich habe ein Modell mit 3 Personen: Studenten, college-und Sprachkurse. Angenommen, ich will speichern, Schüler und college-Einrichtungen in store1, und Natürlich in Store2, ich hätte 2 sets von managedObjectContext, pesistent speichern und anhaltende cordinator. Nun da können wir keine cross-store relatioinships, die Modifikation, die in einem Kontext nicht-Effekt einem anderen Kontext. Sie nicht haben, um verschiedene Modelle zu erstellen oder ordnen Sie Sie-stores, etc.