Pregunta

Tengo un problema con la clasificación de los contenidos NSTABLECOLUMN. En mi NSTABLEVIEW hay tres columnas: archivo, tamaño, ruta. Los contenidos se almacenan en nsmutableArray. Cada objeto en esta matriz es un NSDictionary que contiene tres claves: archivo, tamaño y ruta: el valor para cada uno es un NSString.

En Interface Builder, en los atributos de la columna de cada tabla, puedo elegir opciones de clasificación: Selector: IB ingresado "Compare:" que creo que está bien, porque comparo NSStrings. Ordene la clave, y ese es el problema, creo, no sé en qué ingresar aquí.

¿Alguna pista? Si tiene preguntas sobre mi código, pregunte.

¿Fue útil?

Solución

Entonces encontré la solución completa.

Primero, vaya a Interface Builder. Seleccione la columna que desee clasificar. Vaya al inspector de la columna y elija el primer botón para ver los "Atributos de la columna de la tabla". Establezca los valores apropiados (literalmente, no "o 'o @ son necesarios):

Sort key: file

donde 'archivo' es la clave del diccionario que el contenido se muestra en su columna.

Selector: compare:

función de clasificación estándar.

Ahora, guarde todos los cambios aquí y salte a Xcode, a la clase en la que se encuentra el modelo, fuente de los datos que se muestran en NSTABLEVIEW. Ya debería saber que necesita dos métodos allí:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

Estos dos son necesarios para conformarse con el protocolo informal NSTABLEDATASOURCE. Puedes leer sobre ello en el Centro MacDev.

Ahora todo lo que tiene que hacer es agregar un nuevo método:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors

Puede contener un código muy simple que hará 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]; 
}

Y eso es todo. Está funcionando en mi aplicación, espero que funcione en su caso: D todo debería funcionar automáticamente. Acabo de guardar todos los archivos y construí la aplicación. Y funcionó. :)

Sitio que me ayudó:Cocoadev: SortingNstableView

Otros consejos

La clave es el key que usa en el diccionario para recuperar el valor.

En su caso, tiene tres claves: archivo, tamaño y ruta. Seleccione el que desea clasificar. La clave se utiliza para recuperar el valor de cada registro que se utilizará para la clasificación.

Si sus claves son @"archivo", @"tamaño", @"ruta" y desea ordenar file Entonces trata de poner value.file en el Sort Key campo en ib.

Use claves que use al insertar values en tu NSDictionary.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top