2010-10-14 6 views
7

Ich möchte die Ergebnisse einer NSFetchRequest nach Einheit gruppieren. Die Entitäten haben alle denselben abstrakten Elternteil. Zum Beispiel:Ist es möglich, nach Unterklassen in einem `NSFetchRequest` zu sortieren, ohne zusätzliche Attribute hinzuzufügen?

animal 
| 
|-cat 
| 
|-dog 

Die NSFetchRequest hat includesSubentities gesetzt TRUE und entity Set animal. Es ist möglich, sectionNameKeyPath von NSFetchedResultsController auf entity.name zu setzen, aber es ist nicht möglich, das Gleiche mit der sortDescriptors von NSFetchRequest zu tun, da die auf die gespeicherten Attribute angewendet werden (dh Daten in der Datenbank, nicht Methoden auf den Klassen). Daher besteht die einzige Möglichkeit, nach Entitätstyp zu gruppieren, darin, der Superklasse ein Attribut hinzuzufügen, das von Unterklassen verwendet werden kann, um sich selbst zu identifizieren.

Dies scheint verrückt, da es die Nützlichkeit der Vererbung untergräbt. Ich habe in der SQLite-Datenbank nachgesehen und der Entitätstyp wird in der gleichen Tabelle wie die Attribute gespeichert, so dass die erforderlichen Daten bereits vorhanden sind.

Zusammenfassend: Ist es möglich, nach Unterklassen in einer NSFetchRequest zu sortieren, ohne zusätzliche Attribute hinzuzufügen?

+0

Haben Sie jemals eine Antwort auf diese Frage gefunden? – epologee

+0

@epologee. Nein, ich habe keine Lösung gefunden. Ich denke, das Beste, was zu tun ist, ist entweder 'fetchedResultsController.sections' neu zu sortieren oder' NSFetchedResultsController' nicht zu verwenden. –

+0

Ich habe mehrere NSFetchedResultsController-Instanzen verwendet, eine für jede Entität: S. Ich habe die Frage bevorzugt, ob jemand jemals eine Antwort darauf findet. Prost. – epologee

Antwort

2

Ich denke, die Antwort ist nein.

Das Abrufen und Sortieren erfolgt im Speicher (für SQLLite-Speicher), daher müssen die Attribute Teil des Datenmodells sein. Aus dem Haupthandbuch zur Datenprogrammierung (Funktionen für beständigen Speicher):

Es gibt einige Interaktionen zwischen dem Abrufen und dem Speichertyp. In den XML-, Binary- und In-Memory-Stores erfolgt die Auswertung der Prädikat- und Sortierdeskriptoren in Objective-C mit Zugriff auf die gesamte Cocoa-Funktionalität, einschließlich der Vergleichsmethoden auf NSString. Der SQL-Speicher hingegen kompiliert die Prädikat- und Sortierdeskriptoren zu SQL und wertet das Ergebnis in der Datenbank selbst aus. Dies geschieht hauptsächlich für die Leistung, aber es bedeutet, dass die Evaluierung in einer Nicht-Cocoa-Umgebung stattfindet und Sortierdeskriptoren (oder Prädikate), die auf Cocoa basieren, können nicht funktionieren.

auch

Zusätzlich können Sie nicht auf die transiente Eigenschaften sortieren Sie die SQLite Speicher verwenden.

Verwandte Themen