2017-07-24 4 views
0

Ich habe ein CoreData-Modell-Objekt, das einen Typ namens sessionID enthält (eine UUID wird jedes Mal generiert, wenn der Benutzer eine Funktion in der App verwendet) - Daten werden immer mit der gleichen sessionID für jede Sitzung erfasst und aufgezeichnet.NSFetchresultsController mehrfaches Prädikat

Die aufgezeichneten Daten würde wie folgt aussehen: x Anzahl der Zeilen mit lässt sessionID sagen: ... 1 und dann y Anzahl der Datensätze für sessionID: ... 2

`` `

sessionID: 0000-0000-0000-0000-0001, ... 
sessionID: 0000-0000-0000-0000-0001, ... 
sessionID: 0000-0000-0000-0000-0002, ... 
sessionID: 0000-0000-0000-0000-0002, ... 
sessionID: 0000-0000-0000-0000-0002, ... 

etc. `` `

ich NSFetchResultsController bin mit den Aufzeichnungen für den Benutzer auf einem UITableView zu präsentieren (und es funktioniert) Allerdings würde ich mag eine Option Umschalten zwischen Darstellung aller Aufzeichnungen haben und nur die eindeutige sessionID als Zeilen in der Tabelle vi ew. Ist das mit NSFetchResultController möglich?

Während ich die Anfrage auf eindeutige Ergebnisse zurückgeben, scheint es nicht zu funktionieren, ich bekomme immer noch alle Datensätze.

`` `

[fetchRequest setEntity:entity]; 
[fetchRequest setReturnsDistinctResults:YES]; 
[fetchRequest setPropertiesToFetch:@[@"session_id"]]; 

` ``

+0

Sie können die Abrufanforderung jederzeit ändern, indem Sie sicherstellen, dass der Cache gelöscht wird. – sschale

+0

Mögliches Duplikat von [Warum können wir FetchRequest bei NSFetchedResultsController nicht ändern?] (Https://stackoverflow.com/questions/7200855/why-we-cant-change-fetchrequest-at-nsfetchedresultscontroller) – sschale

Antwort

0

returnsDistinctResults nicht für einen fetchedResultsController arbeiten. Verwenden Sie sectionNameKeyPath der abgerufenenResultsController, um durch sessionId zu gruppieren.

Das Ergebnis besteht aus vielen Abschnitten, wobei jeder Abschnitt Einträge mit denselben sessionIds enthält.

Wenn Sie wann alle Einträge anzeigen dann keine Überschrift für den Abschnitt anzeigen und jede Zeile in jedem Abschnitt anzeigen. Wenn Sie nur die SessionId anzeigen möchten, zeigen Sie eine Zeile pro Abschnitt. Sie können die Sitzungs-ID abrufen, indem Sie das erste Element in dem Abschnitt betrachten.

Dies erfordert nicht, dass Sie den abgerufenenResultsController überhaupt ändern müssen - Sie ändern nur, wie Sie die Informationen anzeigen. Abhängig von Ihrer UI/UX können Sie es einfacher finden, zwei Tabellenansichten zu haben, und die Umschalttaste zeigt und verbirgt sie. Oder es könnte einfacher sein, einen BOOL in Ihrem Controller zu setzen und [tableview reloadData] aufzurufen, wenn Sie den Modus wechseln.