NSTableView et tri des données
Veillard
Membre
Bonjour,
Je cherche à trier une liste de données dans une NSTableView. Pour cela, j'ai utilisé ceci d'après ce que j'ai pu trouver...
J'ai bien dans la petite flèche en en-tête de colonne qui indique si le tri est fait par ordre croissant ou décroissant mais les données ne sont pas triées...
J'ai utilisé aussi les bindings qui fonctionnent bien mais les données affichées dans la table ne correspondent aux données originales, de plus j'ai d'autres problèmes avec la méthode des bindings...
Que faire ?
Je cherche à trier une liste de données dans une NSTableView. Pour cela, j'ai utilisé ceci d'après ce que j'ai pu trouver...
<br />-(void) tableView:(NSTableView*)tableView didClickTableColumn:(NSTableColumn *)tableColumn<br />{<br /> NSMutableArray *tableauTrie = [NSMutableArray arrayWithCapacity:0];<br /> NSSortDescriptor *descriptor;<br /><br /> descriptor=[[NSSortDescriptor alloc] initWithKey:@"typeMatos" ascending:YES selector:@selector(compare:)];<br /> [[matosTableView tableColumnWithIdentifier:@"typeMatos"] setSortDescriptorPrototype:descriptor];<br /> [tableauTrie addObject:descriptor];<br /> [descriptor release];<br /><br /> [matosTableView setSortDescriptors:tableauTrie];<br /> [tableauDuMatos sortUsingDescriptors:[matosTableView sortDescriptors]];<br /> <br /> [matosTableView reloadData];<br />}<br />
J'ai bien dans la petite flèche en en-tête de colonne qui indique si le tri est fait par ordre croissant ou décroissant mais les données ne sont pas triées...
J'ai utilisé aussi les bindings qui fonctionnent bien mais les données affichées dans la table ne correspondent aux données originales, de plus j'ai d'autres problèmes avec la méthode des bindings...
Que faire ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tout d'abord j'ai fait une sous classe de NSTableView et j ai mis mon appli en delegate de celle-çi.
Dans IB, paramètre tes données relatives au tri : sort Key , sort Selector et sort Order
puis il suffit alors d'implementer ce code :
- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn
{
[tableView reverseAscendingDirection];
NSSortDescriptor *aDescriptor=[NSSortDescriptor alloc] initWithKey:[[tableColumn sortDescriptorPrototype] key] ascending:[tableView ascendingDirection autorelease];
NSArray *sortDescriptorArray=[NSArray arrayWithObject:aDescriptor];
tableView dataArray] setArray:[[tableView dataArray] sortedArrayUsingDescriptors: sortDescriptorArray;
[tableView reloadData];
}
voila!!
bon courage
Je crois que j'ai dû louper quelque chose ???
c est que j ai oublié de te dire le contenu de ces methodes!! qui sont des methodes que j'ai crée dans la sous-classe de NSTableView
- (void)reverseAscendingDirection
{
ascendingDirection=!ascendingDirection;
}
- (NSMutableArray *)dataArray
{
return sourceArray;
}
sourceArray étant le contenu que doit afficher ta NSTableView
l'interface de la sous table
@interface MyTableView : NSTableView
{
NSMutableArray *sourceArray;
BOOL ascendingDirection;
}
J'ai essayé et j'ai toujours les messages d'erreur
P.S. : j'ai mis les 3 méthodes dans "MyTableView.m" ...
A+
la première methode ne fait pas partie de l'objet myTableView mais est une methode Delegate gérée par ton controleur
les deux autres sont effectivement des methodes de ta sous classe de NSTableView
a+