2016-08-22 1 views
2

meine Frage mag ein wenig verwirrend klingen, aber ich konnte keinen besseren Titel finden. Lassen Sie mich erklären: Ich entwickle eine iOS App, die CoreData verwendet, um Objekte zu speichern und persistent zu machen. Ich möchte die gespeicherten Objekte in einer UITableView anzeigen. Jedes Objekt enthält ein Datum. Ich möchte, dass meine Tabellenansicht die Objekte nach Datum sortiert anzeigt, und jeden Monat ist ein Abschnitt innerhalb dieser Tabellenansicht.Holen Sie nur benötigte Daten von CoreDate oder alles?

+--------------------+ 
+--- March 2016 ---+ 
+--------------------+ 
+ - Entry 1   + 
+ - Entry 2   + 
+--------------------+ 
+-- February 2016 --+ 
+--------------------+ 
+ - Entry 1   + 
+ .....    + 
. 
. 
. 
. 
+--------------------+ 

Da die Tabellenansicht wissen muss, wie viele Zeilen und Abschnitte gibt es vor die Daten angezeigt werden, muß ich zumindest wissen, wie viele Einträge es in meiner Coredata Lagerung ist.

Ansatz 1

Ich hole nur die Daten der einzelnen Objekte und erzählen die Tabellenansicht, wie viele Zeilen es angezeigt hat. Wenn die Datenquellenmethode cellForRowAtIndexPath aufgerufen wird, hole ich die Daten für genau die Objekte, die ich brauche. Ist CoreData schnell genug, oder muss der Benutzer einen Moment warten, bis die Daten geladen sind?

Ansatz 2

Ich hole alles aus meiner Coredata Lagerung und „store“ die Objekte in meinem ViewController, das die Tabellen-Ansicht hält. Vielleicht braucht es viel Speicher, um jedes einzelne Objekt im Speicher zu behalten.

Ansatz 3 (verzögertes Laden?)

Ich hole die neuesten 10-20 Objekte von Coredata. Wenn der Benutzer in der Tabellenansicht scrollt und gerade dabei ist, den letzten Eintrag zu erreichen, hole ich die nächsten 10-20 Einträge und zeige sie an. Was ist mit den Einträgen, die ich zuerst geladen habe? Soll ich sie im Gedächtnis behalten? Oder holen Sie sie erneut, wenn der Benutzer nach oben scrollt?

Ich möchte nicht "Zeit" damit verschwenden und jeden einzelnen von ihnen selbst ausprobieren, ich hoffe du kannst mir helfen und jemand hat Erfahrung mit solchen Sachen. Vielen Dank!

+0

Ansatz 3 ist am besten für Sie. Sobald die Objekte abgerufen sind, speichern Sie sie in einem Variablen-Array in Ihrem View-Controller. Wenn der Benutzer mehr abruft, hängen Sie Ihr Array an und laden Sie Ihre Tabelle neu. Denken Sie daran, dass Sie auch nur zählen können, wenn das alles ist, was Sie brauchen, aber das ist hier vielleicht nicht die beste Strategie. –

+0

Haben Sie 'NSFetchedResultsController' angeschaut? –

Antwort

0

Sie sollten NSFetchedResultsControler verwenden. Keine der Optionen, die Sie aufgelistet haben, erscheint korrekt, da diese Anforderung bereits vom Framework unterstützt wird. Sie sollten sich nicht darum kümmern, was Sie überhaupt holen sollen. Stellen Sie einfach die richtige Konfiguration bereit und alles wird vom Framework erledigt. Wenn Sie NSFetchedResultsController instanziieren, geben Sie den sectionNameKeyPath Parameter ein. Ihr Abrufergebnis wird basierend auf diesem Attribut gruppiert. Es kann ein berechnetes Attribut sein, wie in Ihrem Fall der Monat und das Jahr Ihrer Aufzeichnung.

Verwandte Themen