2017-04-16 2 views
1

Ich muss Einträge für eine Entität abrufen und sie nach Abschnitten sortieren, wie Sie für eine TableView tun würden. Ich mache dies jedoch nur, um die Anzahl der Vorkommen für jeden Abschnitt zu zählen, ich brauche nicht die tatsächlichen Daten, die jedem Eintrag zugeordnet sind. Mein Endziel ist es, ein Wörterbuch von Format zu haben:NSFetchedResultsController zum sektionierten Abrufen?

[String : Int] // Key: Section identifier, Value: occurrences for that section

wird unter Verwendung eines NSFetchedResultsController Overkill für eine solche Aufgabe oder sollte ich tun, um eine normale NSFetchRequest und Abschnitt aus den Daten, nachdem sie abgeholt ist?

Irgendwelche Gedanken?

+0

Mögliches Duplikat von [NSFetchedResultsController: Sortierdeskriptoren und Abschnitte] (http://stackoverflow.com/questions/21280452/nsfetchedresultscontroller-sort-descriptors-and-sections) –

Antwort

0

ein NSFetchedResultsController Ergebnisse in einer Hol- und ein Anruf auf dem Wert der sectionKeyPath für jedes Element in der Liste verwenden (die jedes Einzelteil Störung werden und möglicherweise Code ausgeführt werden, wenn Sie eine benutzerdefinierte Eigenschaft für die sectionKeyPath haben).

Wenn Sie countForFetchRequest verwenden und eine separate Abrufanforderung für jeden Abschnitt erstellen können, würde dies zu einer Abrufanforderung für jeden Abschnitt und zu keinem Fehler führen.

Wenn Sie viele Abschnitte mit sehr wenigen Elementen haben, ist die Verwendung eines geholtenResultsControllers wahrscheinlich schneller. Wenn Sie sehr wenige Abschnitte mit vielen Elementen haben, wäre die zweite Methode wahrscheinlich schneller. Der einzige Weg, um wirklich zu wissen, welcher Weg es ist, ist schneller zu testen und zu benchmarken.

Ich denke, dass jeder Weg in Ordnung ist, es sei denn, Sie sind Leistungsprobleme und Sie sollten tun, was am sinnvollsten für Sie Code. Persönlich würde ich eine NSFetchedResultsController verwenden. Es ist meine bevorzugte Art, Daten anzuzeigen, da dies auch dazu beitragen kann, dass Ihre Daten synchron bleiben.

0

Eine andere Option wäre, eine Abrufanforderung zu verwenden, die die Abschnittskennung als propertiesToGroupBy angibt, und eine NSExpression zu verwenden, um die Anzahl der Elemente zu berechnen. Die Abrufanforderung muss resultType auf .DictionaryResultType festgelegt haben, und das Abrufen wird ein Array von Wörterbüchern zurückgeben. Jedes Wörterbuch hat zwei Schlüssel/Werte, von denen der eine die Abschnittskennung und der andere die Elementanzahl ist. Es gibt viele Beispiele zu SO, wenn Sie nach "GROUP BY" und "COUNT" suchen, aber ich kann Code zusammenstellen, wenn Sie Details zu Ihren Entitäten, Attributen, Abschnittsbezeichnern usw. angeben. Wie in der anderen Antwort angegeben ist schwer zu sagen, ob dies signifikante Geschwindigkeitsvorteile gegenüber FRC oder normalem Fetch bietet.

Verwandte Themen