Magische Aufnahme, Speichern und NSFetchedResultsController

Ich bin mir nicht sicher, ob dies ein Problem mit der Art und Weise ist, wie Magical Record speichert, oder ich mache nur irgendwo einen Noob-Fehler.

Ich verwende einen NSFetchedResultController (FRC) und UITableView, um eine Liste von Entitäten anzuzeigen. Wenn der Benutzer auf "Hinzufügen" eines neuen View Controllers mit einem Editor tippt, wird mit eine neue Entität erstellt[MyEntity MR_createEntity]. Der Benutzer kann hier zusätzliche Entitäten hinzufügen, die über eine Beziehung zur Hauptentität hinzugefügt werden. Wenn der Benutzer in diesem View Controller auf "Speichern" tippt, wird der Kontext mit gespeichert[[NSManagedObjectContext MR_contextForCurrentThread] MR_save]

Der NSFetchedResultsController scheint aktualisiert zu werden, aber wenn ich auf tippe, um die Entität zu bearbeiten, ist keine der untergeordneten Entitäten vorhanden. Das Debuggen scheint zu zeigen, dass der FRC, obwohl die Entität gespeichert wurde, immer noch die Entität mit ihrer temporären ID hat.

Ich mache eine naive[self.tableView reloadData] in der FRCcontrollerDidChangeContent delegieren Methode.

Durch einen Neustart der Anwendung werden die richtigen Entitäten geladen und die untergeordneten Entitäten werden ordnungsgemäß im Editor-Ansichts-Controller angezeigt.

Es sieht so aus, als ob der FRC auf das Sicherungsereignis "Hauptthread" reagiert, aber das Speichern findet tatsächlich in einem Hintergrundthread statt, sodass der FRC es nicht sieht. Ich habe überprüft und alle "meine" Vorgänge (Einrichten der FRC, Erstellen und Abrufen von Entitäten) finden alle im Haupt-Thread-Kontext statt.

Ich habe versucht, auf Änderungsbenachrichtigungen in MR_rootSavingContext zu warten und sie mit dem Hauptthreadkontext zusammenzuführen. Das hat funktioniert, aber ich habe doppelte Zeilen in der FRC erhalten (eine war die richtige "permanente" Entität und eine war die temporäre).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage