Ordinamento del contenuto di NstableColumn
-
25-09-2019 - |
Domanda
Ho un problema con l'ordinamento dei contenuti di NstableColumn. Nel mio nstableview ci sono tre colonne: file, dimensioni, percorso. I contenuti sono archiviati in NSMutableArray. Ogni oggetto in questo array è un NSDictionary contenente tre chiavi: file, dimensioni e percorso - valore per ciascuno è un NSString.
In Interface Builder, negli attributi di ogni tabella posso scegliere le opzioni di smistamento: selettore: IB immesso "Confronta:" che penso sia OK, perché confronto NSStrings. Ordina la chiave - e questo è il problema che penso - non so cosa entrare qui.
Qualche indizio? Se hai domande sul mio codice, chiedi.
Soluzione
Quindi ho trovato la soluzione completa.
Innanzitutto, vai a Interface Builder. Seleziona la colonna che vuoi ordinare. Vai all'ispettore della colonna e scegli il primo pulsante per visualizzare gli "attributi della colonna della tabella". Imposta valori appropriati (letteralmente, no "o 'o @ sono necessari):
Sort key: file
dove "file" è la chiave del dizionario che il contenuto è mostrato nella colonna.
Selector: compare:
funzione di ordinamento standard.
Ora, salva tutte le modifiche qui e salta su Xcode, nella classe in cui è il modello, la fonte dei dati mostrati in NSTABLEVIEW. Dovresti già sapere che hai bisogno di due metodi lì:
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
*)tableColumn row:(NSInteger)row
Questi due sono necessari per conformarsi al protocollo informale NSTOBableAtaSource. Puoi leggerlo al MacDev Center.
Ora tutto ciò che devi fare è aggiungere un nuovo metodo:
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
Può contenere un codice molto semplice che farà la cosa:
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
{
NSArray *newDescriptors = [tableView sortDescriptors];
[results sortUsingDescriptors:newDescriptors];
//"results" is my NSMutableArray which is set to be the data source for the NSTableView object.
[tableView reloadData];
}
E questo è tutto. Funziona nella mia app, spero che funzioni nel tuo caso: D tutto dovrebbe funzionare automaticamente. Ho appena salvato tutti i file e ho creato l'app. E ha funzionato. :)
Sito che mi ha aiutato:COCOADEV: SortingNstableView
Altri suggerimenti
La chiave è la key
che usi nel dizionario per recuperare il valore.
Nel tuo caso hai tre chiavi: file, dimensioni e percorso. Seleziona quello su cui vuoi ordinare. La chiave viene utilizzata per recuperare il valore da ciascun record da utilizzare per l'ordinamento.
Se le tue chiavi sono @"file", @"dimensione", @"percorso" e vuoi sistemare file
Quindi prova a mettere value.file
dentro Sort Key
campo in ib.
Usa i tasti che usi quando si inserisce values
nel tuo NSDictionary
.