2010-01-28 4 views
5

Ich habe einen NSFetchedResultsController eingerichtet, um ein UITableView zu füllen, basierend auf meinem "Haupt" NSManagedObjectContext.NSFetchedResultsController zeigt keine Updates aus anderen Kontexten an

In einem Zeitgeber füge ich fortlaufend Objekte in einen separaten NSManagedObjectContext, aber einen, der seinen NSPersistantStoreCoordinator mit dem Hauptkontext teilt.

Ich kann NSManagedObjectContextWillSaveNotification Benachrichtigungen gesendet werden, und wenn ich einen Neustart der App beendet, habe ich alle Daten aus dem vorherigen Lauf. Mit dem aktuellen NSFetchedResultsController werden jedoch keine Aktualisierungen vorgenommen.

Ich habe ein Testprojekt erstellt und es here platziert.



(Ich dachte zunächst, dies auf Grund geschah dort mehrere Threads im Spiel zu sein, aber es geschieht, wenn alles in einem Thread durchgeführt wird).

Original Question

Ich habe eine NSFetchedResultsController Einrichtung eines UITableView zu füllen, basierend aus meinem 'main' NSManagedObjetContext.

In einem Hintergrundthread kann ich mehrere Objekte in einen separaten NSManagedObjectContext herunterladen und importieren, aber einen, der seinen NSPersistantStoreCoordinator mit dem Kontext des Hauptthreads teilt.

Ich bin registriert, um NSManagedObjectContextWillSaveNotification Benachrichtigungen zu erhalten. Wenn ich diese bekomme, leite ich sie zum Hauptthread weiter und übergebe sie an meinen Hauptkontext.

Mit dem Debugger kann ich beobachten, wie diese eingehen und überprüfen, ob sie tatsächlich Objekte zum Kontext hinzufügen. Meine NSFetchedResultsController wird jedoch nicht aktualisiert. Wenn ich das alles im Hauptthread mache, funktioniert es. Aufruf von -performFetch: auf dem Controller wird es zu aktualisieren, so weiß ich, es ist nicht, dass es nicht die neuen Objekte sehen.

Das meiste davon ist Boilerplate-Code, nur in verschiedene Threads aufgeteilt.

+0

Haben Sie wirklich zwei Kontexte im Hauptthread erstellt und rufen Sie 'mergeChangesFromContextDidSaveNotification:' etc auf? – Yuji

+0

Nein, wenn ich Multithreading deaktiviere, wird alles mit einem Kontext gemacht (hatte vorher die falsche Antwort). –

+0

Wurde festgestellt, dass dies ein Fehler mit NSFRC ist? –

Antwort

11

Erhalten Sie Delegat Rückrufe von NSFetchedResultsController? Wenn nicht, dann könnte dies ein Fehler mit dem NSFetchedResultsController selbst sein. Ich würde empfehlen, ein Testprojekt zu erstellen, das dieses Problem isoliert/bestätigen kann.

Wenn Sie es isoliert duplizieren können;

  1. Ich würde gerne sehen :)
  2. Datei ein Radar mit Apple.

Nach dem Code der Überprüfung ist die Antwort von NSManagedObjectContextWillSaveNotification zu NSManagedObjectContextDidSaveNotification Ihre Mitteilung Beobachter zu ändern. Sie haben die Nachricht nur gesendet vor die Speicherung aufgetreten ist, die Ihre Probleme verursacht hat.