Question

J'ai une application de données de base à base de documents qui fonctionne comme est. Je voudrais ajouter le support pour un magasin global persistant de tenir une bibliothèque d'éléments.

Je l'ai lu la plupart des documents pertinents, et comprendre que j'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 du document ne sont que dans la configuration des documents et les entités dans la configuration de la bibliothèque ne sont que dans la configuration de la bibliothèque -. À savoir, pas de chevauchement

Les docs puis disent: « Vous utilisez ensuite ce modèle lorsque vous créez un coordinateur ». Mais je ne crée pas mon propre coordinateur du magasin persistant depuis que je suis à l'aide du coordinateur par défaut NSPersistentDocument.

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 devine que ce serait probablement utiliser nulle lorsque le temps est venu pour sauver le document. Et si oui, serait-ce un problème? À savoir, comment le coordinateur 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 magasin persistant du NSPersistentDocument avant qu'il ait été créé / sauvé? Des NSPersistentDocument docs:

  

Enregistrement d'un nouveau document ajoute un magasin du type par défaut avec l'URL choisie et invoque sauvegarder: le contexte. Pour un document existant, une sauvegarde juste sauver invoque:. Le contexte

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 la NSPersistentDocument utiliser ces instances NSPersistentStoreCoordinator et NSManagedObjectContext, et libérez les anciens? Si oui, comment pourrais-je spécifier l'URL pour le NSPersistentDocument pour le addPersistentStoreWithType: ... méthode? Il semble que cette URL est seulement connue une fois que le document sans titre a été enregistré. (Test cela, il ne semble pas être un magasin persistant temporaire (via persistentStores méthode sur le coordinateur de stockage permanent) jusqu'à ce que le document est enregistré pour la première fois).

C. Ou serait-il préférable de laisser NSPersistentDocument seul, et créer mon propre instance NSPersistentStoreCoordinator que j'utilise exclusivement pour le magasin de la bibliothèque persistante et le modèle d'objet bibliothèque gérée? Les documents disent que plusieurs instances de NSPersistentStoreCoordinator doivent être utilisés dans des applications multithread de base de données, mais je ne requièrent pas de données de base multithread. Est-il souhaitable d'avoir deux instances de NSPersistentStoreCoordinator - un pour la bibliothèque et un pour les documents (l'intuition dit que ce n'est pas nécessaire et probablement pas la bonne approche)

Toutes les suggestions?

Était-ce utile?

La solution

La solution je qui fonctionne bien est basé sur C) ci-dessus. Je laisse le NSPersistentDocument et il est coordinateur du magasin persistant seul, et à la place créer mon propre instance NSPersistentStoreCoordinator que j'utilise exclusivement pour le magasin de la bibliothèque persistante (magasin global).

Je peux définir la configuration du magasin à une valeur personnalisée dans le cas où je veux avoir plusieurs magasins associés à ce coordonnateur de stockage permanent plus tard (par exemple, « LibraryConfiguration »). Depuis le magasin de la bibliothèque est gérée par un coordonnateur de magasin persistant différent du coordonnateur du magasin persistant du NSPersistentDocument, je ne ai pas besoin de se préoccuper de spécifier une configuration pour les magasins persistants du NSPersistentDocument.

Autres conseils

Vous devez créer un magasin persistant pour chaque configuration. C'est ce que la configuration est pour, pour vous permettre de stocker différentes entités dans le même modèle de données dans des fichiers séparés persistants.

oublie qu'un coordonnateur du magasin persistant Une erreur commune ici peut avoir un nombre arbitraire de magasins persistants. Tout ce que vous devez faire est de dupliquer le boilerplate Apple pour créer créer deux magasins persistants avec des noms différents et / ou lieux et chacun avec un nom de configuration différente. Puis ajouter à la fois au coordonnateur de stockage permanent.

Et vous avez terminé. Les instances d'entités pour chaque configuration iront dans le magasin à droite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top