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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top