Es bastante simple en realidad, una vez que llegue a entenderlo (por supuesto!). No puede usar un NSArray directamente como fuente de tabla. Necesita crear un objeto personalizado que implemente NSTableViewDataSource o implementar ese protocolo en alguna clase existente, generalmente un controlador. Si usa Xcode para crear una aplicación estándar basada en documentos, la clase de controlador de documentos (se llamará MyDocument) es una buena clase para usar.
que necesita para implementar al menos estos dos métodos:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
Si tiene una matriz mutable cuyos valores desea utilizar en una vista de tabla con una columna, algo así como lo que sigue debe hacer lo un comienzo:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
Sólo se me ha ocurrido que podría añadir los dos métodos anteriores como una categoría a la sustitución de NSArray myMutableArray
con self
y entonces usted puede utilizar una matriz como fuente de datos.
De todos modos, con una matriz mutable, es importante que cada vez que se cambie, es necesario dejar que la vista de tabla saber que se ha cambiado, por lo que necesita para enviar la vista de tabla -reloadData
.
Si su vista de tabla tiene más de una columna y desea rellenarlo con propiedades de objetos en su conjunto, hay un truco que puede hacer para que sea más fácil para usted.Digamos que los objetos de la matriz son instancias de una clase llamada Persona con dos métodos definidos:
-(NSString*) givenName;
-(NSString*) familyName;
y quiere que su vista de tabla para tener una columna para cada uno de ellos, se puede establecer la propiedad identifier
de cada columna al nombre de la propiedad en la persona que la que muestra la columna y usar algo como lo siguiente:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
si se reemplaza con valueForKey:
valueForKeyPath:
y la clase de persona que también tiene los siguientes métodos:
-(Person*) mother;
-(Person*) father;
-(NSString*) fullName; // concatenation of given name and family name
puede agregar columnas de tabla con identificadores como: father.fullName
o mother.familyName
y los valores se completarán automáticamente.
este enlace no funciona! por favor actualizarlo! – elin3t