2010-09-01 12 views

Respuesta

31

Una forma de hacerlo es a través de KVC, utilizando un NSArrayController para llenar un NSTableView.

Código Ejemplo:

TestAppDelegate.h

#import <Cocoa/Cocoa.h> 

@interface TestAppDelegate : NSObject <NSApplicationDelegate> 
{ 
    IBOutlet NSArrayController *arrayController; 
    IBOutlet NSTableView *theTable; 
} 

@property (assign) IBOutlet NSArrayController *arrayController; 
@property (assign) IBOutlet NSTableView *theTable; 

- (void) populateTable; 

@end 

TestAppDelegate.m

#import "TestAppDelegate.h" 

@implementation TestAppDelegate 

@synthesize arrayController; 
@synthesize theTable; 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    // Populate the table once with the data below 
    [self populateTable]; 
} 

- (void) populateTable 
{ 
    NSMutableDictionary *value = [[NSMutableDictionary alloc] init]; 
    // Add some values to the dictionary 
    // which match up to the NSTableView bindings 
    [value setObject:[NSNumber numberWithInt:0] forKey:@"id"]; 
    [value setObject:[NSString stringWithFormat:@"test"] forKey:@"name"]; 

    [arrayController addObject:value]; 

    [value release]; 

    [theTable reloadData]; 
} 
@end 

Ahora crea los enlaces en Interface Builder:

  • Crear una NSArrayController & conéctelo a arrayController
  • Conecte el NSTableView a laTabla;
  • Seleccione la NSTableView y establecer TestAppDelegate como su dataSource & delegado
  • Para cada columna de la tabla
  • unirse a su valor a arrayController
  • Establecer los tecla Controlador de a arrangedObjects
  • Conjunto el modelo clave ruta a cada clave desde arriba (por ejemplo, id o nombre)

Cuando se ejecuta, ahora debe haber una sola fila de datos. (Este es un código no probado, pero debe dar la idea general)

Para obtener más ayuda con estas fijaciones echa un vistazo a this example.

Here is also a good example con imágenes de cómo crear un NSTableView poblado.

+12

Muy buena y sustancial respuesta. Sin embargo, algunas pequeñas objeciones técnicas. Con el uso de un controlador para rellenar las columnas de la vista de tabla, no es necesario * conectar * dataSource de la vista de tabla y delegar propiedades. Además, no estás usando KVC en tu código de muestra, estás usando * bindings *. Si bien el mecanismo de enlaces se basa en KVC (así como en KVO y más), en realidad no está utilizando ninguna de las API de KVC en su muestra porque no es necesario. – Huperniketes

Cuestiones relacionadas