J'ai une application Core Data basée sur des documents qui fonctionne telle quelle. Je voudrais ajouter le support pour un magasin persistant global pour tenir une bibliothèque d'articles.Application de base de données de données avec magasin persistant global
J'ai lu la plupart des documents pertinents et je comprends que je devrais utiliser des configurations dans les modèles d'objets gérés. J'ai défini deux configurations: "DocumentConfiguration" et "LibraryConfiguration". Les entités dans la configuration de document sont uniquement dans la configuration de document et les entités dans la configuration de bibliothèque sont uniquement dans la configuration de bibliothèque, c'est-à-dire, pas de chevauchement. Les docs disent alors "Vous utilisez ensuite ce modèle lorsque vous créez un coordinateur". Mais je ne crée pas mon propre coordinateur de magasin persistant puisque j'utilise le coordinateur NSPersistentDocument par défaut.
Quelques questions sur la meilleure façon de procéder et aider à dissiper tout malentendu je pourrais avoir:
A. Est-ce que j'obtenir le NSPersistentStoreCoordinator dans le NSPersistentDocument puis ajouter un nouveau magasin persistant le long des lignes de:
NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator];
[coordinator addPersistentStoreWithType:NSXMLStoreType
configuration:@"LibraryConfiguration"
URL:url
options:nil
error:&error];
Je pense que cela peut être un problème parce que je ne l'ai pas fourni l'autre définition de la configuration (le « DocumentConfiguration ») dans le coordinateur du magasin persistant du NSPersistentDocument que j'utilise la valeur par défaut fournie par NSPersistentDocument. Je suppose qu'il utiliserait probablement zéro quand le temps est venu de sauver le document. Et si oui, cela serait-il un problème? C'est-à-dire, comment le coordinateur peut-il savoir quel magasin persistant pour enregistrer une entité avec une définition de configuration donnée si les mêmes configurations ne sont pas définies pour tous les magasins persistants (dans ce cas deux)? Suis-je capable de définir la configuration (à "DocumentConfiguration") du stockage persistant de NSPersistentDocument avant qu'il ait été créé/enregistré? Des 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. Serait-il préférable de créer mes propres instances NSPersistentStoreCoordinator et NSManagedObjectContext, en ajoutant les deux magasins persistants avec des configurations définies, puis faire le NSPersistentDocument utiliser ces instances NSPersistentStoreCoordinator et NSManagedObjectContext et libre les anciens? Si oui, comment est-ce que je spécifierais l'URL pour le NSPersistentDocument pour la méthode addPersistentStoreWithType: ...? Il semble que cette URL ne soit connue qu'une fois le document sans titre sauvegardé. (En le testant, il ne semble pas y avoir de stockage persistant temporaire (via la méthode persistStores sur le coordinateur de stockage persistant) jusqu'à ce que le document soit enregistré pour la première fois). Ou serait-il préférable de laisser NSPersistentDocument seul et de créer ma propre instance de NSPersistentStoreCoordinator que j'utilise exclusivement pour le modèle de bibliothèque de stockage persistant et de bibliothèque gérée? Les docs disent que plusieurs instances de NSPersistentStoreCoordinator devraient être utilisées dans des applications de base de données multithread, mais je n'ai pas besoin de support de données de base multithread. Est-il souhaitable d'avoir deux instances de NSPersistentStoreCoordinator - une pour la bibliothèque et une pour les documents (l'intuition dit que ce n'est pas nécessaire et probablement pas la bonne approche)?
Des suggestions?
Toutefois, la documentation de NSManagedObjectContext contient uniquement des méthodes permettant d'obtenir/de définir le coordinateur de stockage permanent, sans en ajouter une. C'est-à-dire, à ma connaissance, vous ne pouvez pas avoir plus d'un coordinateur de magasin persistant associé à un contexte d'objet géré. (Le coordinateur de magasin persistant associé à un contexte d'objet géré peut gérer plusieurs banques persistantes, mais c'est différent). – Dalmazio
Désolé, j'ai mal écrit. Vous ajoutez réellement les magasins multiples au coordinateur de magasin persistant avec 'addPersistentStoreWithType: configuration: URL: options: erreur:' – TechZen
D'accord, mais il y a toujours le problème pour cette situation (intégration d'un magasin persistant global et le magasin d'un document basé application) d'appel de addPersistentStoreWithType: ... sur le coordinateur de stockage persistant de NSPersistentDocument comme décrit en A) ci-dessus. – Dalmazio