NSTableView et tri des données

VeillardVeillard Membre
19:16 modifié dans API AppKit #1
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...

<br />-(void) tableView:(NSTableView*)tableView didClickTableColumn:(NSTableColumn *)tableColumn<br />{<br />     NSMutableArray *tableauTrie = [NSMutableArray arrayWithCapacity:0];<br />       NSSortDescriptor *descriptor;<br /><br />       descriptor=[[NSSortDescriptor alloc] initWithKey:@&quot;typeMatos&quot; ascending:YES selector:@selector(compare:)];<br />      [[matosTableView tableColumnWithIdentifier:@&quot;typeMatos&quot;] 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 ?

Réponses

  • 19:16 modifié #2
    J ai eu le même problème que toi, voila comment j'ai résolu :
    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
  • VeillardVeillard Membre
    19:16 modifié #3
    OK merci, je vais essayer  :)
  • VeillardVeillard Membre
    19:16 modifié #4
    J'ai essayé ta méthode et j'ai les messages d'erreur suivants :


    warning: `NSTableView' may not respond to `-reverseAscendingDirection'
    warning: cannot find method `-reverseAscendingDirection'; return type `id' assumed
    warning: `NSTableView' may not respond to `-dataArray'
    warning: cannot find method `-ascendingDirection'; return type `id' assumed


    Je crois que j'ai dû louper quelque chose  ???
  • 19:16 modifié #5
    aie...
    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;
    }
  • VeillardVeillard Membre
    19:16 modifié #6
    Salut

    J'ai essayé et j'ai toujours les messages d'erreur  :( :( :(

    P.S. : j'ai mis les 3 méthodes dans "MyTableView.m" ...

    A+
  • 19:16 modifié #7
    re
    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+
Connectez-vous ou Inscrivez-vous pour répondre.