Propiedad recuperada de almacenamiento cruzado de Core Data

Actualmente estoy pensando en un problema con Core Data. tengo uno usuario modelo en su propia tienda sobre el que no tengo ningún control, ya que se envía con un marco. Un coordinador de tienda persistente, un modelo de objeto administrado y un contexto para este modelo se crean automáticamente y no se pueden tocar. En ella, este modelo tiene un único usuario entidad

Por otro lado, tengo un de propiedades modelo con un de propiedades entidad en ella sobre la que tengo control total. Ahí almaceno propiedades para algunos usuario entidades en la otra tienda. Tanto las entidades de usuario como las de propiedad tienen un id atributo similar a una clave foránea. Este modelo tiene su propio coordinador de almacenamiento persistente, modelo de objetos administrados y contexto.

Lo que ahora quiero es tener el asociado usuario entidad como un atributo de la de propiedades entidad, por lo que podría vincularme a rutas clave similares a myproperty.user.someValueOfTheUserEntity (Soy consciente de que myproperty podría ser una matriz cuando se usan propiedades recuperadas).

Sin embargo, como las relaciones entre tiendas no son compatibles, pensé en usar una relación débil a través de Propiedades obtenidas. Ese solo tendría que hacer coincidir los dos correspondientes id atributos He creado una propiedad recuperada para el usuario en Xcode y los accesores requeridos en mi de propiedades archivo de clase de la entidad (como se sugiere en otras preguntas, estoy tratando los valores devueltos por la Propiedad Fetched como una matriz).

Sin embargo, no puedo establecer una entidad de destino para la propiedad recuperada en Xcode, ya que la entidad de destino reside en una tienda completamente diferente. ¿Tendría que definir también mi usuario entidad en el de propiedades ¿Tienda? Si es así, ¿cómo sabe Core Data que esa entidad no se buscará en mi almacén de propiedades sino en el almacén de usuarios?

Algunos subprocesos mencionaron el uso de configuraciones para esto, pero no puedo encontrar ninguna documentación que vaya más allá de mencionar "usar configuraciones para esto".

¿Alguien puede iluminarme sobre cómo configurar propiedades obtenidas de almacenamiento cruzado? #

preguntado el 28 de julio de 12 a las 10:07

1 Respuestas

Puede usar varias tiendas persistentes que comparten el mismo modelo de datos:

  • Use un modelo de datos único (xcdatamodeld) y agregue todas sus entidades
  • Cree configuraciones (Editor/Agregar configuración) para cada "conjunto lógico" de entidades que deben almacenarse en un archivo de almacenamiento separado
  • Asignar (arrastrar) entidades a las configuraciones apropiadas
  • Agregue tiendas persistentes configuradas a su contexto (ver más abajo)
  • Configurar propiedades obtenidas
// 1. Add "static", read-only store
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
             configuration:@"your static configuration name goes here..."
             URL:storeUrl
             options:@{
                 NSReadOnlyPersistentStoreOption: @(YES),
                 NSInferMappingModelAutomaticallyOption : @(YES)
             }
             error:&error];
// 2. Add "dynamic", writable content
[coordinator addPersistentStoreWithType:NSSQLiteStoreType
             configuration:@"your dynamic configuration name goes here..."
             URL:storeUrl
             options:@{
                NSMigratePersistentStoresAutomaticallyOption: @(YES),
                NSInferMappingModelAutomaticallyOption : @(YES)
             }
             error:&error];

Respondido 07 ago 12, 08:08

Gracias por su respuesta una ayuda en esto. Sin embargo, ahora, al agregar la tienda de solo lectura, aparece el error "El modelo utilizado para abrir la tienda es incompatible con el utilizado para crear la tienda". La mamá se crea a partir del archivo .xcdatamodel que contiene todas las entidades en sus configuraciones. Simplemente agregar el almacén dinámico no plantea el problema y también crea un archivo .sqlite con tablas para todas las entidades. Simplemente agregar la tienda estática no funciona. He creado una Gist más detallada (gist.github.com/3296730) con mi código. ¿Algunas ideas? - BinaryBucks

Probablemente eso signifique que debe volver a crear el archivo de la tienda (es decir, la base de datos sqlite) utilizando el último modelo. Mi código: NSString *path = [[NSBundle mainBundle] pathForResource:@"MyModel" ofType:@"momd"]; NSURL *momURL = [NSURL fileURLWithPath:path]; _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; PD, perdón por la gran demora con la respuesta: Sergi Salyuk

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.