2012-04-10 10 views
0

Derzeit habe ich eine UITableView mit seiner Datenquelle, die eine NSFetchedResultsController ist. Das Wichtigste, was die NSFetchedResultsController tut ist automatisch meine Tabelle zu aktualisieren, wenn es Änderungen gibt, über Delegate-Methoden. Allerdings muss ich nicht mehr holen, um meine Entität zu erhalten, nennen Sie sie "Pictures" für jetzt. Ich habe eine andere Entität genannt Folder, und folders haben eine Beziehung mit Pictures, so dass jede folder eine NSSet pictures hat.Alternative zu NSFetchedResultsController?

Anstatt also alle pictures holen, die zu einem bestimmten folder gehören, jetzt kann ich nur folder.pictures tun, und das zurückgibt, was ich brauche, und ich kann das zu einem Array zuweisen und festgelegt, dass als meine tableView Quelle. Das gibt mir aber keine automatischen Tabellenupdates wie ein NSFetchedResultsController würde.

Meine Frage ist, wie kann ich die Funktionalität eines NSFetchedResultsController haben (dh die Delegate-Methoden, die meine Tabelle automatisch aktualisieren) ohne einen Abruf auszuführen? Ich muss nicht mehr abholen, da ich eine NSSet mit der gewünschten NSManagedObjects habe.

Antwort

2

Was ist falsch mit dem abgerufenen Ergebnis-Controller? Behalte es einfach und verwende die Punktnotation auch für Beziehungssätze - du erhältst das Beste aus beiden Welten.

Der eigentliche Vorteil der abgerufenen Ergebnisse Controller ist eigentlich verborgen. Es wird Ihre Objekte (folders) in Ordnung holen - aber vielleicht wird es nicht alle Beziehungsattribute holen (pictures). Dies wird als Fehler bezeichnet. Dies bedeutet, dass die Kerndaten die Daten im Hintergrund erhalten, wenn sie benötigt werden. Es ist automatisch für Geschwindigkeit und gute Speichernutzung optimiert. Zum Beispiel muss das potenziell riesige Array Ihrer Datenquelle nicht alle im Speicher sein, was bei einem Array unvermeidlich ist.

So wollen Sie wirklich nicht die FRC loswerden. Sie ist deine Freundin. Bleib ihr treu. ;-)

+0

Warte, es gibt eine Möglichkeit, einen ganzen Satz einer Entität zu holen? – Snowman

+0

Nun ja, genau so, wie Sie es sonst tun würden. Angenommen, Sie haben eine Instanz von 'folder' für eine Zeile Ihrer Tabellenansicht abgerufen - Sie können nun einfach wie gewohnt auf' folder.pictures' zugreifen. – Mundi

+0

Also mein abgerufener Ergebnis-Controller hätte nur 1 Objekt, den Ordner, und für meine Tabellenansicht Anzahl der Zeilen würde ich folder.pictures.count tun? – Snowman