2013-06-08 9 views
7

Supponiamo di avere un gruppo di oggetti Articolo memorizzati nel modello di dati di base. Ogni articolo mantiene, un attributo progresso di lettura che denota quanto dell'articolo è stato letto dall'utente. Una volta che l'utente ha letto completamente l'articolo, l'articolo è contrassegnato come "Letto". Prima di ciò, sarebbe contrassegnato come "non letto".Creare righe di gruppo in NSTableView utilizzando CoreData con supporto NSArrayController

Ora ho un NSTableView associato a un NSArrayController contenente tutti gli oggetti Articolo archiviati utilizzando CoreData. Voglio che visualizzi tutti gli articoli non letti in un gruppo "Non letti" e tutti leggano gli articoli nel gruppo "Leggi".

so sul metodo

- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row 

nel NSTableViewDelegate. Tuttavia, ciò insinua che dobbiamo avere righe reali che dicano "Leggi" e "Non letto" all'interno di NSArrayController che verrà promosso al gruppo. Poiché NSArrayController contiene oggetti di articoli estratti da CoreData, come faccio a fare questo?

NB: Questa è la mia prima domanda qui, e io sono di nuovo da cacao, si prega di andarci piano con me :)

+0

2 anni e ancora nessuna risposta. Hai trovato una soluzione nel frattempo? –

+0

Sto anche cercando una funzione simile ma non ho trovato alcuna soluzione. Eri in grado di farlo. Se sì, potresti farmi sapere come ottenerlo. –

+0

Una soluzione è usare un FRC di terze parti come questo https://github.com/konstantinpavlikhin/KSPFetchedResultsController – CryingHippo

risposta

0

Io suggerisco di usare NSOutlineview e NSTreeController per creare raggruppamento invece di NSTableView e NSArrayController.

0

È necessario compilare manualmente NSArrayController con istanze di classe personalizzate che contengono esattamente il contenuto di NSTableView che si desidera eseguire, comprese le righe di gruppo. Il controller deve essere compilato nell'ordine corretto. Quindi dovrebbe iniziare con un oggetto intestazione di gruppo, quindi alcuni oggetti dati, un nuovo oggetto intestazione e così via. La classe personalizzata deve contenere le seguenti proprietà:

Valore stringa per l'intestazione del gruppo. È zero quando la riga non è un'intestazione di gruppo.

Valore booleano isGroupHeader. Necessario per un facile tableView: isGroupRow: implementazione.

NSManagedObject valore per i dati regolari. È zero quando la riga è un'intestazione di gruppo.

Con questo si dispone di tutti gli strumenti per implementare tutti i delegati di NSTableView per ottenere una vista tabella correttamente raggruppata.

Problemi correlati