2 Stimmen

Wie behandele ich NSFetchedResultsControllerDelegate-Updates für benutzerdefinierte Ergebnisseansicht?

Ich arbeite derzeit an einer CoreData-basierten iPhone-App mit einer Kartenansicht, deren Annotationen aus einem NSFetchedResultsController generiert werden sollen. Die Idee der Kartenansicht ist, dass sie eine Reihe von gespeicherten Standorten für den Benutzer anzeigt.

Einer der Vorteile der Verwendung eines NSFetchedResultsController ist, dass ich meine Kartenansicht als Delegaten auf dem NSFetchedResultsController festlegen und über Änderungen informiert werden kann, die an einem anderen Gerät oder auf einer Website vorgenommen werden, wenn der Benutzer angemeldet ist.

Ich habe derzeit ein wenig Schwierigkeiten zu verstehen, wie ich mit einer Vielzahl verschiedener Arten von Updates umgehen kann, die an meine NSFetchedResultsControllerDelegate-Implementierung gesendet werden. Die Dokumentation: http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSFetchedResultsControllerDelegate_Protocol/Reference/Reference.html scheint nicht zu erklären, wie diese unterschiedlichen Updates behandelt werden sollen, da sie eher auf die Integration mit einer UITableView ausgerichtet zu sein scheint, die den Großteil der Arbeit übernimmt.

Ich halte ein NSDictionary meiner Annotationen, die sie auf den NSIndexPath innerhalb des Ergebnismengen abbilden. Das Problem ist zum Beispiel, wenn ich 10 Bewegungs-, 3 Einfüge- und 4 Lösch-Updates erhalte, in welcher Reihenfolge sollte ich diese verarbeiten? Einige dieser indexPaths werden eine Reihe von konfliktierenden Indizes haben und die Reihenfolge, in der sie verarbeitet werden, wird sich auf die tatsächlichen Annotationen auswirken, die ich verschieben, einfügen oder löschen muss. Wenn ich zuerst alle Bewegungs-Updates durchführe, dann werden die Einfüge-Indizes zur Folge haben, dass die endgültige Reihenfolge anders sein wird, als wenn ich zuerst eingefügt hätte.

Gibt es bereits vorhandene kleine Bibliotheken/ Klassen, die einen Satz von Indizes vor einem Update in einen Satz von Indizes nach einem Update übersetzen? Wenn nicht, kann mir jemand erklären, wie das funktioniert, damit ich meine eigene schreiben kann?

Jede Hilfe wird sehr geschätzt werden!

0voto

Nate Petersen Punkte 888

Der Ablauf der NSFetchedResultsControllerDelegate-Methoden für einen Update-Zyklus sieht wie folgt aus:

  • controllerWillChangeContent: (einmal aufgerufen)
  • controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: (X Mal aufgerufen)
  • controllerDidChangeContent: (einmal aufgerufen)

Jeder Aufruf der didChangeObject-Methode bezieht sich nur auf ein Objekt / einen IndexPath. Sie sollten die Änderungen in der Reihenfolge anwenden, in der Sie sie über diese Aufrufe von didChangeObject erhalten. Das wird sie konsistent halten.

Wenn Sie Abschnitte verwenden, könnten auch Aufrufe von controller:didChangeSection:atIndex:forChangeType: zwischen den Objektänderungsaufrufen vorkommen.

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