Domanda

Ho un'applicazione Core Data documento-based che funziona così com'è. Vorrei aggiungere il supporto per un archivio permanente globale per contenere una libreria di oggetti.

Ho letto la maggior parte dei documenti rilevanti, e capire che avrei dovuto utilizzare le configurazioni nei modelli di oggetti gestiti. Ho definito due configurazioni: "DocumentConfiguration" e "LibraryConfiguration". Le entità nella configurazione del documento sono solo nella configurazione del documento, e le entità nella configurazione della libreria sono solo nella configurazione della libreria -. Vale a dire, senza sovrapposizioni

La documentazione poi dire "È quindi possibile utilizzare questo modello quando si crea un coordinatore". Ma io in realtà non a creare il mio coordinatore archivio permanente dal momento che sto usando il coordinatore di default NSPersistentDocument.

Alcune domande sul modo migliore di procedere e di aiuto chiarire eventuali equivoci che potrei avere:

A. Avrei ottenere il NSPersistentStoreCoordinator nel NSPersistentDocument e quindi aggiungere un nuovo archivio permanente ad esso lungo le linee di:

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error];

Sto pensando che questo può essere un problema perché non ho fornito l'altra definizione di configurazione ( "DocumentConfiguration") in persistente coordinatore negozio del NSPersistentDocument come sto usando il default fornito da NSPersistentDocument. Sto indovinando che sarebbe probabilmente usare nullo quando il tempo è venuto per salvare il documento. E se è così, questo sarebbe un problema? Vale a dire, come sarebbe il coordinatore sapere quale archivio permanente per salvare un'entità con una data definizione configurazione se le stesse configurazioni non sono definiti per tutti i negozi persistenti (in questo caso due)? Sono in grado di impostare la configurazione (a "DocumentConfiguration") della memoria permanente del NSPersistentDocument prima che sia stato creato / salvato? Dalla documentazione NSPersistentDocument:

  

Salvataggio di un nuovo documento aggiunge un negozio del tipo di default con l'URL scelto e invoca Save: dal contesto. Per un documento esistente, un salvare solo invoca Save:. Sul contesto

B. Sarebbe meglio per creare le mie istanze NSPersistentStoreCoordinator e NSManagedObjectContext, aggiungendo i due negozi persistenti con le configurazioni definite, e poi fare il NSPersistentDocument utilizzare queste istanze NSPersistentStoreCoordinator e NSManagedObjectContext, e liberare i vecchi? Se è così, come faccio a specificare l'URL per la NSPersistentDocument per l'addPersistentStoreWithType: ... metodo? Sembra che questo URL è noto solo una volta che il documento senza titolo è stato salvato. (Testing questo, ci non sembra essere alcun archivio permanente temporanea (tramite metodo persistentStores sulla persistente coordinatore negozio) fino a quando il documento viene salvato per la prima volta).

C. O sarebbe meglio lasciare NSPersistentDocument solo, e creare la mia propria istanza NSPersistentStoreCoordinator che uso in esclusiva per il negozio libreria persistente e gestita modello a oggetti di biblioteca? I documenti dicono che più istanze di NSPersistentStoreCoordinator dovrebbero essere utilizzati in applicazioni multithread Core Data, ma io non richiedono multithreaded il supporto Core Data. E 'desiderabile avere due istanze di NSPersistentStoreCoordinator -? Uno per la libreria e uno per i documenti (intuizione dice che questo non è necessario e probabilmente non l'approccio corretto)

Qualche suggerimento?

È stato utile?

Soluzione

La soluzione che ho usato che funziona bene è basato su C) di cui sopra. Lascio la NSPersistentDocument ed è persistente coordinatore negozio da sola, e invece creare il mio esempio NSPersistentStoreCoordinator che uso in esclusiva per il negozio libreria permanente (archiviazione globale).

è possibile impostare la configurazione per il negozio per un valore personalizzato nel caso in cui voglio avere più negozi associati a questa persistente coordinatore negozio più tardi (ad esempio, "LibraryConfiguration"). Dal momento che il negozio di biblioteca è gestito da un persistente diverso coordinatore negozio da persistente coordinatore negozio del NSPersistentDocument, non ho bisogno di essere preoccupato per specificare una configurazione per i negozi persistenti del NSPersistentDocument.

Altri suggerimenti

È necessario creare un archivio permanente separato per ogni configurazione. Questo è ciò che la configurazione sono per, per consentire di memorizzare entità diverse nello stesso modello di dati in file separati persistenti.

Un errore comune è qui dimenticando che un coordinatore archivio permanente può avere un numero arbitrario di negozi persistenti. Tutto quello che devi fare è duplicare il boilerplate di Apple per creare creare due negozi persistenti con nomi diversi e / o posizioni e ognuno con un nome configurazione diversa. Quindi aggiungere sia alla persistente coordinatore del negozio.

e si è fatto. Le istanze di entità per ogni configurazione andranno in negozio a destra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top