Il ne faut pas confondre Controller et data source. Généralement quand on a une interface graphique, on l'associe à un Controller. En effet les objets de l'interface sont décrits dans le controller sous forme d'outlets ainsi que les actions executées par une target (un bouton par exemple).
une data source est un objet associé à une tableview. c'est elle qui l'allimente. Quand tu demandes à une tableview de faire reload par exemple, Ta tableview appelle la méthode tableview:objectValueForTableColumn:row: de sa data source autant de fois que sa data source a d'éléments. Ce nombre d"éléments est fourni par une autre méthode de sa data source qui est numberOfRowsInTableView:
exemple de data source
@interface UNEDataSource : NSObject <NSTableDataSource>
{
id *tableau[100][100];
int taille = 0;
}
- (id)tableView

NSTableView *)aTableView objectValueForTableColumn

NSTableColumn *)aTableColumn row

int)rowIndex
- (void)tableView

NSTableView *)aTableView setObjectValue:anObject forTableColumn

NSTableColumn *)aTableColumn row

int)rowIndex
- int)numberOfRowsInTableView

NSTableView *)aTableView
@end
l'implémentation serait :
- int)numberOfRowsInTableView

NSTableView *)aTableView
{
return taille;
}
- (id)tableView

NSTableView *)aTableView objectValueForTableColumn

NSTableColumn *)aTableColumn row

int)rowIndex
{
int i,j;
if ([[aTableColumn identifier] stringValue] == "Nom") then j = 2
else j = 1;
return Tableau[rowIndex][j];
}
etc.....
Dans le controller de la tableview si vous avez appelé par myTableView son outlet, et par laDataSource sa datasource (déclarée par UNEDataSource *ladataSource)
l'association est faite par :
[myTbleView setDataSource:laDataSource];
Par contre si vous avez un bouton qui permet de calculer par exemple le total d'une colonne, vous pouver ajouter dans la data source la méthode SommeColumn: qui le fait. Par contre dans le controller vous faites :
[laDatasource SommeColumn:j];