E 'abbastanza semplice, in realtà, una volta che si arriva a capire che (ovviamente!). Non è possibile utilizzare un NSArray direttamente come origine tabella. È necessario creare un oggetto personalizzato che implementa NSTableViewDataSource o implementare tale protocollo in alcune classi esistenti, in genere un controller. Se si utilizza Xcode per creare un'applicazione basata su documenti standard, la classe del controllore di documenti (che si chiamerà MyDocument) è una buona classe da utilizzare.
è necessario implementare almeno questi due metodi:
– numberOfRowsInTableView:
– tableView:objectValueForTableColumn:row:
Se si dispone di un array mutabile i cui valori si desidera utilizzare in una vista tabella con una colonna, qualcosa come il seguente dovrebbe fare come un inizio:
– numberOfRowsInTableView: (NSTableView*) aTableView
{
return [myMutableArray count];
}
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
return [myMutableArray objectAtIndex: rowIndex];
}
si è appena venuto in mente che si potrebbe aggiungere questi due metodi come una categoria a NSArray sostituzione myMutableArray
con self
e quindi è possibile utilizzare un array come una sorgente di dati.
In ogni caso, con una serie mutevole, è importante che ogni volta che si cambia, è necessario lasciare che la visualizzazione della tabella sapere che è stato modificato, quindi è necessario inviare la visualizzazione della tabella -reloadData
.
Se la visualizzazione della tabella ha più di una colonna e si vuole popolarlo con le proprietà degli oggetti nella vostra matrice, c'è un trucco che si può fare per rendere più facile per te stesso.Diciamo che gli oggetti in vostro array sono istanze di una classe chiamata Persona con due metodi definiti:
-(NSString*) givenName;
-(NSString*) familyName;
e volete che il vostro vista tabella per avere una colonna per ciascuno di questi, è possibile impostare la proprietà identifier
di ogni colonna al nome della proprietà nella persona che quella colonna visualizza e usare qualcosa come il seguente:
– tableView: (NSTableView*) aTableView objectValueForTableColumn: (NSTableColumn *)aTableColum row: (NSInteger)rowIndex
{
Person* item = [myMutableArray objectAtIndex: rowIndex];
return [item valueForKey: [tableColumn identifier]];
}
se si sostituisce valueForKey:
con valueForKeyPath:
e la vostra classe persona ha anche i seguenti metodi:
è possibile aggiungere colonne di tabella con identificatori come: father.fullName
o mother.familyName
ei valori verranno popolati automaticamente.
questo collegamento non funziona !! per favore aggiornalo! – elin3t