Clasificación de contenidos nstablecolumn
-
25-09-2019 - |
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.
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
.