SortDescriptors tableView
Mick
Membre
Bonjour à tous,
J'ai un petit soucis avec une appli coreData. La structure de données étant complexe, je n'utilise pas les bindings (j'ai essayé, mais j'ai eu des problèmes comme dirait l'autre). Donc, une tableView est peuplée via une dataSource.
Mon soucis : comment techniquement utiliser les "sortDescriptors" à la manière des NSArrayControllers "bindé", c'est à dire comment gérer le fait qu'un clic sur un header de la table modifie les sorts Descriptors ?
Je n'ai pas retrouvé l'info dans la doc, mais j'ai surement mal cherché comme dirait ma femme...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour une colonne nommée "nom" j'ai fait :
Ok mpergand, et merci de ta réponse. Ca d'accord, mais comment gérer les "clics" sur les header pour changer l'ascendance etc.. ?
Si tu as installé un descriptor, la petite flèche apparaà®t dans la colonne spécifiée.
Tu peux aussi le faire directement dans IB en sélectionnant la colonne et en remplissant le champ "Sort Key" (dans mon cas "nom")
dans mon awakeFromNib de mon controleur qui gère la table :
Les "petites flèches" n'apparaissent pas.
Regarde ce tuto, ça parle de core data et de tri de colonnes:
A Core Data Tutorial Part 2: Polishing the Basics
Merci pour le lien.
J'ai testé des choses, et j'ai compris que chaque tableColumn doit avoir un sortDescriptorPrototype.
Via IB, impec, cela fonctionne.
Par le code, je créee un descriptor et envoie le message [laColonne setSortDescriptorPrototype:descriptor], mais dans ce cs, ke choix que j'ai fait (ascending YES ou ascending NO) est "figé". Un clic sur le header de la colonne ne change pas le sens....
Grrr. Je ne comprends pas comment faire à la main ce qu'on fait dans IB en remplissant "Sort Key" !!
Le tri fonctionne, mais impossible de changer le sens, alors que lorsque la manip est faite dans IB, on peut changer le sens, même si initialement il était "acsending". Un détail m'échappe, mais je ne sais pas lequel. Je ne trouve pas dans la doc.
Il doit manquer ça:
Merci mPergand.
Mais ce que je ne comprends pas, c'est que via IB, le tri fonctionne nikel => la "sort Key" est définie dans le champ, j'ai bien le triangle qui apparait et qui "toggle", la mise à jour se fait parfaitement bien.
Mais, les colonnes que j'ai créées à la main et insérées dans la tableView ne se comportent pas de la même façon. Je dois oublier quelque chose dans l'initialisation, ou bien c'est le sortDescriptorPrototype qui pose problème... Je ne vois pas.
Je vais faire à la main je pense, en interceptant la méthode déléguée mouseDownInHeaderOfTableColumn.
C'est bon !!
Merci à Laudema et à toi MPergand.
en fait, je cherchais compliqué là où c'était simple... J'utilisais un arrayController intermédiaire, qui ne servait en fait à rien et qui interférait avec les sortDescriptors de la table. Bref, c'était un peu le merdier. J'ai revu au propre avec vos conseils, et cela fonctionne très bien.
Pour ce qui auraient des soucis de tris, losqu'on crée une colonne par le code, il faut bien spécifier un sortDescriptorPrototype pour qu'elle devienne "sortable". Ensuite, soit un NSArrayController + Bindings gère, soit une dataSource dans laquelle on implémente la méthode qu'à indiqué mpergand
Bonne nuit !