6 Stimmen

NSFetchedResultsController-Delegate-Methoden werden nach mergeChangesFromContextDidSaveNotification nicht ausgelöst

Ich habe ähnliche Beiträge wie diesen durchgesehen, aber keiner hat mein Problem beantwortet.

Wie bei CoreDataBooks verwende ich ein separates MOC für das Hinzufügen und Bearbeiten von Artikeln und beobachte die entsprechenden Benachrichtigungen, etwa so:

- (void)addControllerContextDidSave:(NSNotification*)saveNotification {

  NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
  // Merging changes causes the fetched results controller to update its results
  [context mergeChangesFromContextDidSaveNotification:saveNotification];
  NSLog(@"merging changes in rootview");
}

Wenn ich speichere, wird es korrekt angezeigt. Das Debuggen der Benachrichtigung zeigt den richtigen Kontext, und das Debuggen des Kontexts zeigt das gerade hinzugefügte Element. Auch die Protokollnachricht wird ordnungsgemäß ausgedruckt. Aber es passiert nichts. Keine der delegierten Methoden des NSFetchedResultsController Feuer, noch ist die Tabelle Ansicht aktualisiert.

Ich habe versucht, den Cache zu löschen oder zu löschen. Ich habe versucht reloadData auf die tableView, aber nichts. Wenn ich die App beende und neu starte, wird sie gut angezeigt.

UPDATE: Die Meldung enthält tatsächlich den richtigen Kontext, da sie object die den richtigen Artikel enthält, aber die userInfo Hash hat keinen Inhalt:

userInfo = {
  inserted = "{(\n)}";
  updated = "{(\n)}";
}

Es sieht also so aus, als ob die Benachrichtigung keine Änderungen enthält, obwohl sie den richtigen Kontext mit dem geänderten Element hat .... hmmmm.

1voto

Christoph Punkte 1500

Und der Preis für den dümmsten Fehler geht an ... Christoph!!!

Der Grund dafür, dass die Benachrichtigung nichts anzeigte, war, dass ich vergessen hatte, das separate MOC zu speichern, bevor ich den Delegierten aufrief, der die Benachrichtigung einrichtete, und dann erneut zu speichern.

Da das MOC gerade erst gespeichert wurde, gab es bei der zweiten Speicherung keine Änderungen, so dass die Meldung leer blieb. Das Entfernen des ersten Speichers, was ich schon viel früher hätte tun sollen, hat das Problem behoben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X