Ich verwende Apples CoreDataBooks
Beispielanwendung als Grundlage für das Ziehen von Daten in einen sekundären verwalteten Objektkontext im Hintergrund und das anschließende Zusammenführen dieser Daten in das primäre verwaltete Objekt Kontext.Illegaler Versuch, eine Beziehung 'xyz' zwischen Objekten in verschiedenen Kontexten zu erstellen
Die Daten, die ich einziehe, ist eine Book
Einheit mit einer Eins-zu-Eins-Beziehung mit einer Owner
Einheit (genannt "Besitzer"). Die Owner
Entität hat eine zu viele Beziehung mit der Book
("Bücher" genannt).
Meine Daten ein XML-Dokument in der Form:
<Owner>
<Name>alexpreynolds</Name>
<ID>123456</ID>
</Owner>
<Books>
<Book>Book One</Book>
<Book>Book Two</Book>
...
<Book>Book N</Book>
</Books>
Book One
durch Book N
mit einem Owner
("alexpreynolds, 123456"
) zugeordnet sind.
Ich analysiere dies in eine Owner
Instanz und eine NSMutableSet
bestehend aus Book
Instanzen.
Wenn ich versuche, das erste Mal zu speichern, speichert es gut und die zusammengeführten Daten werden in der Tabellenansicht angezeigt.
Beim zweiten Speichern, wenn der XML-Inhalt jedoch ein neues Buch enthält, funktioniert es nicht.
Hier ist, was passiert:
ich dann in einem XML-Dokument zu laden versuchen, ein neues Book
nicht bereits in dem primären verwaltete Objektkontext enthält. Die neue Book
verwendet dieselbe Owner
als die, die mit den anderen Book
s zugeordnet ist.
Ich habe Routinen, die dieses einzigartige Owner
verwaltete Objekt auswählen (die ich bereits in meinem primären verwaltete Objektkontext habe) und die einzigartigen Book
die nicht gefunden im primären MOC ist.
Daraus erstelle ich ein neues Book
Objekt im Sekundär MOC, und ich gesetzt sein „owner
“ Beziehung zu den einzigartigen Owner
ich in der primären MOC gefunden zu zeigen.
Wenn ich speichere, erhalte ich folgende Fehlermeldung:
*** 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;
}))'
Wie ich eine neue Book
Einheit im Sekundär MOC schaffen kann, so dass ich immer noch mit einem bereits bestehenden Owner
im primären zuordnen kann MOC?
Danke dafür! Ich habe mit Core Data in einem Hintergrund-GCD-Thread gearbeitet, also musste ich ein Hintergrund-NSManagedObject haben, das ich vergessen hatte, das Eltern-Objekt einzufügen, so dass es den Haupt-Thread NSManagedObject! Trotzdem danke! :) – runmad