Item "All" NSTableView

Bonjour,


 


La question est très certainement très bête, mais voici :


J'ai une application coreData based. Dans une partie de l'appli j'ai une "master detail like" interface : j'ai donc un premier arrayController (auto content, binding vers moc, mode "entity"), puis un second, dont le contentSet est bound au premier (keypath selection.toManyRelationshipKey).


 


Tout ceci fonctionne très bien. Maintenant, je cherche à  "ajouter" à  la table "master" une row "TOUS" ... dont la selection aurait pour effet que l'arrayController retourne tous les objets via le keypath "selection". 


 


 


 


Première idée : créer une instance d'une entité "spéciale", dont la to-many relationship serait maintenue à  jour, mais cela suppose introduire un nouvel attribut qui permet de l'identifier. Ca me paraà®t être de la bidouille.


 


Deuxième idée : utiliser une classe de la couche modèle intermédiaire du genre "tableViewItem", mais cela suppose de maintenir à  jour pas mal de pointeurs. 


 


Troisième idée ?....


Réponses

  • Une commande "Tout sélectionner" (commande-A) qui sélectionnerait toutes les lignes de la table Master? Dans ce cas tu récupères tous les objets du contrôleur Master dans [masterController selectedObjects]...


  • Oui, bien sur cela est possible, mais pour "l'expérience utilisateur", c'est moyen.


     


    J'ai une autre piste, mais je crois qu'elle est déconseillée, c'est de subclasser NSArrayController et overrider arrangedObjects pour retourner un array contenant [super arrangedObjects]+ un autre objet type dictionnaire qui contiendrait une paire value/key @nom/@All, et une paire servant de "flag" du genre YES/@isSpecial ainsi je peux garder les bindings de la tableView vers arrangedObjects.nom.


     


    Ensuite, je vais tenter d'overrider l'accesseur selection, mais là  c'est un peu chaud, permettant de retourner soit [super selection], soit [super arrangedObjects] selon si [super selectedObjects] contient ou non le dictionnaire dont la clef @isSpecial existe et dont la valeur est YES.


     


    Je vais essayer ça et poste le ... résultat !


  • berfisberfis Membre
    décembre 2013 modifié #4

    Attention, avec Core Data, les NSArrayControllers ne suivent pas le comportement standard. Ils sont modifiés (c'est pour ça qu'on doit préciser "Entity" dans IB et leur donner le ManagedObjectContext)...


     


    Une autre solution est d'utiliser une NSOutlineView, où tu peux cocher une check box qui valide tout le sous-ensemble, comme ça:


  • Merci pour ton idée, je crois que je vais m'orienter vers a, car là  je me bats avec les bindings (quand j'override selectedObjects, et que je retourne l'ensemble des objets lorsque "ALL" est sélectionné, et bien ... toutes les rows de la table se sélectionnent ! évidemment !)


     


    Bref, mis à  part créer un groupe "spécial" contenant l'ensemble de tous les autres groupes (ce que je ne trouve pas top), je ne vois pas trop comment faire. Pourtant, j'ai déjà  vu ce genre de chose ! Voici une copie d'écran. Overrider arrangeObjects: m'a permis d'obtenir "All". Mais je ne suis pas certain d'être dans la bonne voie


     


  • Wow... Je vois mieux le truc. Tu vas t'amuser avec les bindings, il y a de quoi faire...  ;)


     


    A part cela, je ne pige pas en quoi une ligne "All" correspond à  une meilleure expérience utilisateur, mais comme on m'a souvent fait remarquer ici que je faisais de non-standard, ma remarque est à  relativiser...  <_<


  • Oui, bah je crois que je vais oublier les bindings et me taper une bonne vieille dataSource+delegate à  la "mano". Je voulais aiguiser un peu mes compétences en touchant d'un peu plus près les bindings, mais je crois que cela devient en fait aussi compliqué que de tout maintenir à  la main quand on sort des sentiers battus.

Connectez-vous ou Inscrivez-vous pour répondre.