2009-11-18 7 views
3

Comment mettre à jour un NSTableView lorsque sa source de données a changé?

Je travaille avec Cocoa Programming pour Mac OS X (un bon livre). Un des exercices que le livre donne est de construire un programme simple à faire. L'interface utilisateur dispose d'une vue tabulaire, d'un champ de texte pour saisir un nouvel élément et d'un bouton "Ajouter" pour ajouter le nouvel élément à la table.

Sur le backend j'ai un contrôleur qui est la source de données et de déléguer pour mon NSTableView. Le contrôleur implémente également une méthode IBAction appelée par le bouton "Ajouter". Il contient un NSMutableArray pour contenir les éléments de la liste de tâches. Lorsque le bouton est cliqué, la méthode d'action se déclenche correctement et la nouvelle chaîne est ajoutée au tableau mutable. Toutefois, mes méthodes de source de données ne sont pas appelées correctement. Les voici:

- (NSInteger) numberOfRowsInTableView: (NSTableView *) aTableView { NSLog (@ "Appelant numberOfRowsInTableView:% d", [todoList count]); return [todoList count]; }

- (id)tableView:(NSTableView *)aTableView 
objectValueForTableColumn:(NSTableColumn *)aTableColumn 
row:(NSInteger)rowIndex { 
    NSLog(@"Returning %@ to be displayed", [todoList objectAtIndex:rowIndex]); 
    return [todoList objectAtIndex:rowIndex]; 
} 

est ici que le bât blesse. -numberOfRowsInTableView n'est appelé que lorsque l'application démarre, pas chaque fois que j'ajoute quelque chose de nouveau au tableau. -objectValueForTableColumn n'est jamais appelé du tout. Je suppose que c'est parce que Cocoa est assez intelligent pour ne pas appeler cette méthode quand il n'y a rien à dessiner. Existe-t-il une méthode que je dois appeler pour que la vue de table sache que sa source de données a changé et qu'elle se redessine?

Répondre

11
-[NSTableView reloadData]; 

Voir NSTableView API reference

+3

J'ai mis un peu d'effort dans la recherche, juste au mauvais endroit. J'ai vérifié le Guide de programmation Table View, la référence API NSTableViewDataSource et la référence API NSTableViewDelegate. Cela semble évident quand vous savez où c'est déjà. – jergason

+0

Assez juste. Bonne chance. –

+9

Ne me lancez pas dans la tentative de trouver la méthode pour une tâche particulière quand elle pourrait être étalée (la divinité de votre choix) ne sait que combien de classes et de protocoles. Ce sont les principales faiblesses de la documentation. Pour utiliser réellement une classe non familière, vous devez lire les docs de la classe, toutes les classes dont elle hérite et tous les protocoles qu'elle hérite ou utilise. Wacky amusant. – TechZen

Questions connexes