Classificando o conteúdo do NSTableColumn
-
25-09-2019 - |
Pergunta
Tenho um problema em classificar o conteúdo do NSTableColumn. No meu NStableView, existem três colunas: arquivo, tamanho, caminho. O conteúdo é armazenado no NSMutableArray. Cada objeto nesta matriz é um nsdictionary contendo três teclas: arquivo, tamanho e caminho - valor para cada um é um nsString.
No interface Builder, nos atributos de cada coluna de tabela, posso escolher opções de classificação: seletor: ib digitado "Compare:" que eu acho que está ok, porque comparo nsstrings. Chave de classificação - e esse é o problema, eu acho - não sei o que entrar aqui.
Alguma pista? Se você tiver perguntas sobre meu código, pergunte.
Solução
Então eu encontrei a solução completa.
Primeiro, vá para o interface Builder. Selecione a coluna que você deseja classificar. Vá para o inspetor da coluna e escolha o primeiro botão para ver os "Atributos da coluna da tabela". Defina valores apropriados (literalmente, não "ou 'ou @ são necessários):
Sort key: file
onde 'arquivo' é a chave do dicionário de que o conteúdo é mostrado na sua coluna.
Selector: compare:
Função de classificação padrão.
Agora, salve todas as alterações aqui e pule para o Xcode, para a classe em que é o modelo, fonte dos dados mostrados no NStableView. Você já deve saber que precisa de dois métodos lá:
-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
*)tableColumn row:(NSInteger)row
Esses dois são necessários para conformar o protocolo informal do NSTablATAsource. Você pode ler sobre isso no MacDev Center.
Agora tudo o que você precisa fazer é adicionar um novo método:
-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors
Ele pode conter um código muito simples que fará a coisa:
-(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 isso é tudo. Está funcionando no meu aplicativo, espero que funcione no seu caso: D Tudo deve funcionar automaticamente. Acabei de salvar todos os arquivos e construí o aplicativo. E funcionou. :)
Site que me ajudou:Cocoadev: STORNINGNSTABLEVIEW
Outras dicas
Chave é o key
que você usa no dicionário para recuperar o valor.
No seu caso, você tem três chaves: arquivo, tamanho e caminho. Selecione aquele em que você deseja classificar. A chave é usada para recuperar o valor de cada registro a ser usado para classificar.
Se suas chaves forem @"arquivo", @"tamanho", @"caminho" e você deseja classificar file
Então tente colocar value.file
no Sort Key
campo em ib.
Use as chaves que você usa ao inserir values
dentro de voce NSDictionary
.