Sto utilizzando l'applicazione di esempio CoreDataBooks
di Apple come base per inserire dati in un contesto oggetto gestito secondario in background e quindi unire tali dati nell'oggetto gestito primario contesto.Tentativo illegale di stabilire una relazione "xyz" tra oggetti in contesti diversi
I dati che sto inserendo sono un'entità Book
con una relazione uno a uno con un'entità Owner
(denominata "proprietario"). L'entità Owner
ha una relazione a molti con lo Book
(chiamato "libri").
miei dati è un documento XML della 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
attraverso Book N
sono associati con un Owner
("alexpreynolds, 123456"
).
Sto analizzando questo in un'istanza Owner
e uno NSMutableSet
costituito da istanze Book
.
Quando si tenta di salvare la prima volta, vengono salvati correttamente e i dati uniti vengono visualizzati nella vista tabella.
Al secondo salvataggio, tuttavia, quando il contenuto XML contiene un nuovo libro, non funziona.
Ecco cosa succede:
ho quindi tentare di caricare in un documento XML che contiene una nuova Book
non già nel contesto oggetto gestito primario. Il nuovo Book
utilizza lo stesso Owner
come quello associato agli altri Book
s.
devo routine che individuano questo unico Owner
oggetto gestito (che ho già ho nella mia contesto oggetto gestito primario) e l'unica Book
che è non trovato nel MOC primario.
Da questo, ho creare un nuovo oggetto nella Book
MOC secondario, e ho impostato la sua relazione "owner
" per indicare la unica Owner
ho trovato nel MOC primario.
Quando risparmio, ottengo il seguente errore:
*** 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;
}))'
Come posso creare un nuovo Book
entità nel MOC secondario, in modo che posso ancora associarlo a un pre-esistente Owner
nel primario MOC?
Grazie per questo! Stavo lavorando con Core Data in un thread GCD in background, quindi dovevo avere uno sfondo NSManagedObject, che avevo dimenticato di usare per inserire l'oggetto genitore, quindi stava usando il thread principale NSManagedObject! Comunque grazie! :) – runmad