Frage

Ich bin vertraut mit der allgemeinen und grundlegenden Verwendung eines NSFetchedResultsController die Zeilen einer Tabelle verwalten, aber ich habe ein interessantes Problem.

Meine Daten organisiert als solche: Zeitplan <--- >> Tag <--- >> Routen. Im Moment habe ich eine Tabellenansicht, die Termine mit einem Fetch-Controller Verwaltung die Erstellung und Löschung von Zugfahrten hat. Ich möchte jetzt eine Tabellenansicht für die Routen erstellen / Tag.

Ich mag eine Strecke auf jeder Zeile zur Liste, und Erstellen von benutzerdefinierten Abschnittsüberschriften, dass entsprechen Informationen innerhalb des jeweiligen Tages. Ich könnte wahrscheinlich Hack etwas zusammen, indem sie alle die Wege zu holen und sie dann durch die inverse Beziehung zu dort jeweiligen Tag sectioning, aber ich bin besorgt, dass dann werde ich nicht in der Lage sein, den Tisch, um die Vorteile der Abruf Controller Delegatmethoden für die Aktualisierung, wenn verwaltete Objekte zu ändern.

hat jemand Erfahrung mit diesem? Alle Ideen, wie sich vorwärts zu bewegen?

Danke.

War es hilfreich?

Lösung

Die NSFetchedResultsController sind für diesen Zweck konzipiert, so dass man das Rad nicht erfinden.

Wenn Sie Ihre NSFetchedResultsController initialisieren, sollten Sie die sectionNameKeyPath Angabe berücksichtigen. Diese Eigenschaft ist genau das, was Sie den Abschnitt für Sie automatisch zu erzeugen müssen.

In Ihrem Fall würde ich tun, wie folgt:

NSEntityDescription: @"Route"
NSPredicate: @"day = %@"
NSFetchedResultsController: sectionNameKeyPath:@"route.day"

Sie sehen, was ich meine, wenn Sie mehr Code zur Klärung benötigen, mir sagen.

Andere Tipps

Sie müssen viele-Beziehung durch die NSSet nach dem erforschen, die erstellt wird, damit Sie die Strecke repräsentieren - >> Tag Pfad in Ihrer Datenbank. Vorausgesetzt, dass Sie Ihre Beziehung isTraversedOn genannt, und die Tag-> Zeitplan als isScheduled, wäre es so etwas wie:

Route *route=[self.fetchedResultsController.fetchedObjects objectAtIndex:0];
for (Day *day in route.isTraversedOn) {
   Schedule *schedule = day.isScheduled;
   NSLog(@"route is traversed on %@ according to schedule %@",day.name,schedule.name);
}

die NSSet speichert nur die tatsächlichen IDs der angezeigten Objekte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top