NSFetchedResultsController - KVO, UITableView und ein "Baum"

8

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:

  • Entität1
    • Anzeigename
    • RelationToEntity2
  • Entität2
    • Anzeigename

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:

  • Entity1 (Eintrag 1)
  • Entity2 (Eintrag 1)
  • Entity2 (Eintrag 2)
  • ...
  • Entity1 (Eintrag 2)
  • ...

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.

    
gamma 20.01.2011, 13:09
quelle

2 Antworten

1

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:

  1. konstruiere ein Subarray, das die neuen Entity1 und assoziierten Entity2 Objekte
  2. enthält
  3. Entscheiden Sie, wo in _flattenedArray das neue Subarray eingefügt werden soll.
  4. rufen Sie 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.

    
freespace 22.01.2011, 09:54
quelle
0

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.

    
malhal 05.12.2017 12:15
quelle