Ich verwende einen NSFetchedResultsController, um KVO für meine UITableView zu implementieren (was offensichtlich ist). Was ich nicht herausfinden kann, ist, wie man mehrere Entitäten - eine Art Baumstruktur - gleichzeitig benutzt (ed).
Hier ist mein Setup:
Jetzt kann ich die Daten von beiden abrufen - so weit so gut. Was ich möchte, ist eine einteilige TableView (wie eine abgeflachte Ansicht) mit der folgenden Struktur:
Obwohl es so aussehen mag, als ob etwas über Sektionen gemacht werden müsste, ist es nicht so. Beide Entitäten sollten ein UITableViewCells sein. Kann mir jemand bitte die richtige Richtung zeigen, um das zu verflachen, ohne die eigentliche Hierarchie zu verlieren.
Es klingt so, als müssten Sie Ihre eigene "abgeflachte" Datenquelle pflegen. Vielleicht wird das Folgende funktionieren:
Wenn NSFetchedResultController
Ihnen mitteilt, dass eine neue Entity1
eingefügt wurde, fügen Sie Entity1
und die zugehörige Entity2
s in say, _flattenedArray
ein, so dass es so aussieht:
[<Entity1>, <related Entity2>, <related Entity2>...]
Wo Sie sie einfügen, liegt ganz bei Ihnen - es kommt ziemlich auf:
Entity1
und assoziierten Entity2
Objekte _flattenedArray
das neue Subarray eingefügt werden soll. reloadData
oder ein anderes Mittel auf, um tableView
der neuen Daten zu melden Wenn ein Entity1
-Objekt entfernt wird, entferne es und alle nachfolgenden Entity2
-Objekte, bis du auf das Ende von _flattenedArray
stößt oder laufe in ein anderes Entity1
-Objekt. Dies setzt voraus, dass Entity2
niemals ein "Top Level" -Objekt ist. Wenn dies der Fall ist, müssen Sie nur diese Entity2
-Objekte in der Relation entfernen.
Wenn ein Entity1
-Objekt ein Entity2
-Objekt gewinnt oder verliert, können Sie zuerst das Entity1
-Objekt von _flattenedArray
löschen und es dann erneut einfügen. Wenn dies zu effizient ist, führen Sie stattdessen eine Zusammenführung durch.
Dies ist genau die Situation, in der die Entity-Vererbung verwendet wird. Beim Abrufen einer übergeordneten abstrakten Entität mit einem abgerufenen Ergebnis-Controller können alle untergeordneten Entitäten von der Tabelle angezeigt werden. Verwenden Sie eine Abschnittsreihenfolge-Eigenschaft, um die Abschnitte in der von Ihnen bevorzugten Reihenfolge anzuzeigen. Und verwenden Sie eine zweite Sortiereigenschaft, um innerhalb der Abschnitte zu sortieren. Die Notes-App erledigt dies, indem sie eine abstrakte Container-Entität abruft und Konten und Ordner anzeigt, die untergeordnete Entitäten sind. Es teilt sich nach Account auf und der erste Ordner "All iCloud" ist eigentlich ein Account. Ordner haben eine Beziehung zu einem Konto, obwohl sie in der Entitätsvererbungsstruktur gleich sind.
Tags und Links objective-c uitableview ios tree key-value-observing