2010-10-14 6 views
7

Desidero raggruppare i risultati di un NSFetchRequest in base all'entità. Le entità condividono lo stesso genitore astratto. Per esempio:È possibile ordinare per sottoclassi in un `NSFetchRequest` senza aggiungere ulteriori attributi?

animal 
| 
|-cat 
| 
|-dog 

Il NSFetchRequest ha includesSubentities impostare TRUE e entity insieme a animal. È possibile impostare sectionNameKeyPath di NSFetchedResultsController su entity.name ma non è possibile fare lo stesso con lo sortDescriptors dello NSFetchRequest a causa del fatto che lo sortDescriptors viene applicato agli attributi memorizzati (ovvero i dati nel database, non i metodi sulle classi). Pertanto, l'unico modo per raggruppare per tipo di entità è quello di aggiungere un attributo alla superclasse che le sottoclassi possono utilizzare per identificarsi.

Questo sembra folle in quanto mina l'utilità dell'ereditarietà. Ho dato un'occhiata al database SQLite e il tipo di entità è memorizzato nella stessa tabella degli attributi in modo che i dati richiesti siano già presenti.

In breve: è possibile ordinare per sottoclassi in un NSFetchRequest senza aggiungere ulteriori attributi?

+0

Hai mai trovato una risposta a questa domanda? – epologee

+0

@epologee. No, non ho trovato una soluzione. Penso che la cosa migliore da fare sia riordinare 'fetchedResultsController.sections' o non usare' NSFetchedResultsController'. –

+0

Ho fatto ricorso a più istanze NSFetchedResultsController, una per ogni entità: S. Preferita la domanda se mai qualcuno trova una risposta ad esso. Saluti. – epologee

risposta

2

Penso che la risposta sia no.

Il recupero e l'ordinamento avvengono nello Store (per archivio SQLLite), quindi gli attributi devono far parte del modello dati. Dalla guida alla programmazione dei dati di base (Persistent Store Features):

Ci sono alcune interazioni tra il recupero e il tipo di archivio. Negli archivi XML, binario e in memoria, la valutazione del predicato e dei descrittori di ordinamento viene eseguita in Objective-C con accesso a tutte le funzionalità di Cocoa, inclusi i metodi di confronto su NSString. L'archivio SQL, d'altra parte, compila il predicato e ordina i descrittori a SQL e valuta il risultato nel database stesso. Questo viene fatto principalmente per le prestazioni, ma significa che la valutazione avviene in un ambiente non Cocoa e quindi i descrittori di ordinamento (oi predicati) che si basano su Cocoa non possono funzionare.

anche

Inoltre non è possibile ordinare sulle proprietà transitori che utilizzano il negozio di SQLite.

Problemi correlati