Estoy utilizando la aplicación de ejemplo CoreDataBooks
de Apple como base para tirar datos en un segundo contexto de objetos gestionados en segundo plano, y luego fusionar esos datos en el objeto administrado principal contexto.intento ilegal de establecer una relación 'xyz' entre objetos en contextos diferentes
Los datos que estoy extrayendo son una entidad Book
con una relación de uno a uno con una entidad Owner
(llamada "propietario"). La entidad Owner
tiene una relación muchos con el Book
(llamado "libros").
Mis datos es un documento XML de la forma:
<Owner>
<Name>alexpreynolds</Name>
<ID>123456</ID>
</Owner>
<Books>
<Book>Book One</Book>
<Book>Book Two</Book>
...
<Book>Book N</Book>
</Books>
Book One
través Book N
están asociados con una Owner
("alexpreynolds, 123456"
).
Estoy analizando esto en una instancia Owner
y un NSMutableSet
compuesto por Book
instancias.
Cuando intento guardar la primera vez, se guarda bien y los datos combinados aparecen en la vista de tabla.
En el segundo guardado, sin embargo, cuando el contenido XML contiene un nuevo libro, no funciona.
Esto es lo que sucede:
Entonces intento cargar en un documento XML que contiene un nuevo Book
no está ya en el contexto de objeto gestionado primaria. El nuevo Book
está utilizando el mismo Owner
que el que está asociado con el otro Book
s.
que tienen rutinas que captan a cabo esta Owner
objeto administrado única (que ya tengo en mi contexto de objeto gestionado primaria) y la única Book
que es no se encuentran en el MOC primaria.
partir de esto, creo un nuevo objeto en el Book
MOC secundaria, y establecer su relación "owner
" para apuntar a la única Owner
que encontré en el MOC primaria.
Cuando guardo, me sale el siguiente error:
*** Terminating app due to uncaught
exception 'NSInvalidArgumentException',
reason: 'Illegal attempt to establish a
relationship 'owner' between objects in
different contexts
(source = <Book: 0x7803590>
(entity: Book; id: 0x7802ae0 <x-coredata:///
Book/t527F06B2-3EB5-47CF-9A29-985B0D3758862>
; data: {
creationDate = 2009-10-12 06:01:53 -0700;
name = nil;
nameInitial = nil;
operations = (
);
owner = nil;
type = 0;
}) ,
destination = <Owner: 0x78020a0> (entity:
Owner; id: 0x3a56f80 <x-coredata://043AF2F0-1AD0-
4078-A5E8-E9D7071D67D1/Owner/p1> ; data: {
books = "<relationship fault: 0x7801bf0 'books'>";
displayName = alexpreynolds;
ownerID = 123456;
}))'
¿Cómo se crea una nueva entidad Book
en el MOC secundaria, por lo que todavía puedo asociarlo con un pre-existente Owner
en las primarias MOC?
¡Gracias por esto! Estaba trabajando con Core Data en un subproceso GCD de fondo, así que tenía que tener un fondo NSManagedObject, que había olvidado usar para insertar el objeto principal, ¡así que estaba usando el hilo principal NSManagedObject! ¡Gracias de todos modos! :) – runmad