Kerndaten-Hintergrund-Thread NSManagedObjectContext-Zusammenführungsfehler

8

Ich schreibe eine Ipad-App, die Artikel anzeigt und neue Artikel in einer separaten NSOperation in einer Warteschlange herunterlädt und in die Kerndaten einfügt. Derzeit habe ich einen separaten Kontext für die Operation, der in der Hauptmethode der Operation erstellt wurde und denselben Koordinator wie den Hauptkontext verwendet. Ich benutze das gleiche Muster, das vorgeschlagen wurde, in dieser Operation für NSManagedObjectContextDidSaveNotification zu hören und dann mergeChangesFromContextDidSaveNotification für den Hauptthreadkontext aufzurufen. Das Problem ist, dass ich diesen Fehler bekomme:

%Vor%

Dieser interessante Teil ist, dass dieser Fehler nur auftritt, wenn ich die App zum ersten Mal nach der Installation starte. Alle nachfolgenden Starts nach der Installation funktionieren einwandfrei. Weiß jemand, warum dieser Fehler passiert und warum es nur bei der Erstinstallation passieren würde.

Außerdem füge ich den Kontext so zusammen, dass er im Hintergrundthread aufgerufen wird, wenn er benachrichtigt wird:

%Vor%     
marchinram 27.01.2011, 13:47
quelle

2 Antworten

17
  

Dieser interessante Teil ist, dass dieser Fehler nur auftritt, wenn ich die App zum ersten Mal nach der Installation starte. Alle nachfolgenden Starts nach der Installation funktionieren einwandfrei. Weiß jemand, warum dieser Fehler passiert und warum es nur bei der Erstinstallation passieren würde.

Ich nehme an, dass der persistente Speicher beim ersten Start nicht korrekt mit der Datei auf dem Datenträger verknüpft ist. Die Datei, die den Core Data-Speicher unterstützt, wird nicht wirksam, wenn Sie dem permanenten Speicherkoordinator seine URL zuweisen. Es tritt nur auf, wenn es zuerst gespeichert wird.

Und das Zusammenführen von Änderungen, ohne dass eine gesicherte Datei bereit ist, verursacht viele Probleme.

Versuchen Sie, den Kontext beim ersten Start aus dem Hauptthread sehr früh in der Ausführung zu speichern, wenn der Core Data-Kontext noch leer ist, bevor Sie den Hintergrundthread erstellen. Hoffentlich löst das dein Problem.

    
Yuji 27.01.2011, 14:11
quelle
0

Hast du irgendeine andere mergeChangesFromContextDidSaveNotification -Benachrichtigung von einem anderen Kontext beobachtet? Wenn dies der Fall ist, könnte es sich um die Reihenfolge handeln, die Sie mitteilen. Es kann an einen Kontext benachrichtigt werden, der nicht über das Schema informiert ist, auf das sich die Änderungen auswirken (auch bekannt als "der permanente Speicher des Objekts ist nicht über den Koordinator dieses NSManagedObjectContext erreichbar").

    
Homero Barbosa 23.01.2013 21:29
quelle