Pregunta

Tengo un uso de la base de datos basada en documentos que funciona como es. Me gustaría añadir soporte para un almacenamiento persistente mundial para mantener una biblioteca de elementos.

He leído la mayor parte de los documentos pertinentes, y entiendo que debo utilizar las configuraciones en los modelos de objetos gestionados. He definido dos configuraciones: "DocumentConfiguration" y "LibraryConfiguration". Las entidades en la configuración documento son sólo en la configuración del documento, y las entidades en la configuración de la biblioteca son sólo en la biblioteca de configuración -. Es decir, sin solapamiento

Los documentos dicen entonces "A continuación, utiliza este modelo cuando se crea un coordinador". Pero que en realidad no crear mi propio coordinador almacén persistente ya que estoy usando el coordinador NSPersistentDocument por defecto.

Algunas preguntas sobre la mejor manera de proceder y ayudar a aclarar cualquier malentendido que podría tener:

A. Me gustaría obtener el NSPersistentStoreCoordinator en el NSPersistentDocument y luego agregar un nuevo almacén persistente a lo largo de las líneas de:

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

Estoy pensando que esto puede ser un problema porque no he proporcionado la otra definición de la configuración ( "DocumentConfiguration") en el coordinador de almacén persistente del NSPersistentDocument como yo estoy usando el valor por defecto proporcionada por NSPersistentDocument. Supongo que probablemente utilice nula cuando llegó el momento de guardar el documento. Y si es así, esto sería un problema? Es decir, cómo sería el coordinador saber qué almacén persistente para salvar una entidad con una definición de la configuración dada si las mismas configuraciones no están definidos para todas las tiendas persistentes (en este caso dos)? ¿Soy capaz de establecer la configuración (a "DocumentConfiguration") de almacenamiento persistente de la NSPersistentDocument antes de que haya sido creada / salvo? A partir de los documentos NSPersistentDocument:

  

Guardar un nuevo documento agrega un almacén del tipo por defecto con la dirección URL e invoca elegido ahorro: en el contexto. Para un documento existente, un ahorro invoca Sólo tiene que guardar:. En el contexto

B. ¿Sería mejor para crear mis propias instancias NSPersistentStoreCoordinator y NSManagedObjectContext, la adición de los dos almacenes persistentes con configuraciones definidas, y luego hacer la NSPersistentDocument utilizar estos casos NSPersistentStoreCoordinator y NSManagedObjectContext, y liberar a los viejos? Si es así, ¿cómo podría especificar la dirección URL de la NSPersistentDocument para la addPersistentStoreWithType: ... método? Parece que esta URL solo se conoce una vez que el documento sin título se ha guardado. (Prueba de esto, no parece ser cualquier almacén temporal persistente (a través de persistentStores método en el coordinador almacén persistente) hasta que el documento se guarda por primera vez).

C. ¿O sería mejor dejar NSPersistentDocument solo, y crear mi propia instancia NSPersistentStoreCoordinator que utilizo exclusivamente para la tienda de biblioteca y persistente modelo de objetos biblioteca administrada? Los documentos dicen que varias instancias de NSPersistentStoreCoordinator deben utilizarse en aplicaciones de Core Data multiproceso, pero no precisa de soporte de Datos Básicos de multiproceso. ¿Es deseable tener dos instancias de NSPersistentStoreCoordinator - uno para la biblioteca y uno para documentos (intuición dice que esto no es necesario y probablemente no es el enfoque correcto)

¿Alguna sugerencia?

¿Fue útil?

Solución

La solución utilicé que funciona bien se basa en C) anterior. Os dejo el NSPersistentDocument y es coordinador de almacén persistente solo, y en su lugar crear mi propia instancia NSPersistentStoreCoordinator que utilizo exclusivamente para la tienda de la biblioteca persistente (almacén global).

I puede establecer la configuración para la tienda a un valor personalizado en caso de que desee tener varios almacenes asociados con este coordinador almacén persistente más tarde (por ejemplo, "LibraryConfiguration"). Desde el almacén de la biblioteca está dirigida por un coordinador diferente almacén persistente del coordinador de almacén persistente del NSPersistentDocument, no necesito que preocuparse acerca de cómo especificar una configuración para tiendas persistentes del NSPersistentDocument.

Otros consejos

Se necesita crear un almacén persistente separado para cada configuración. Eso es lo que son para la configuración, que le permite almacenar diferentes entidades en el mismo modelo de datos en archivos separados persistentes.

Un error común aquí es olvidar que un coordinador almacén persistente puede tener un número arbitrario de tiendas persistentes. Todo lo que necesita hacer es duplicar el texto modelo de Apple para crear crear dos tiendas persistentes con diferentes nombres y / o ubicaciones, y cada uno con un nombre diferente configuración. A continuación, añadir tanto al coordinador almacén persistente.

Y ya está. Las instancias de la entidad para cada configuración entrarán en la tienda de la derecha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top