Désactiver des cases à cocher dans une table avec les bindings
maestric
Membre
C'est l'histoire d'une NSTableView contenant une colonne de cases à cocher (NSButtonCell).
Le binding "value" de la colonne est utilisé pour cocher ou pas les cases.
J'aimerais aussi gérer le fait d'avoir des cases désactivées (grisées, pas "enabled").
Le binding "enabled" se comporte bizarrement : quand je l'active, il va se glisser dans la zone "Parameters" et à l'exécution, j'ai une exception :
Voici un mini-projet avec le problème. J'utilise un NSArrayController d'Elements, ceux-ci ayant 2 attributs : val1 et val2.
http://www.maestric.com/shared/cocoa/TestCheckBoxes.zip
Le binding "value" de la colonne est utilisé pour cocher ou pas les cases.
J'aimerais aussi gérer le fait d'avoir des cases désactivées (grisées, pas "enabled").
Le binding "enabled" se comporte bizarrement : quand je l'active, il va se glisser dans la zone "Parameters" et à l'exécution, j'ai une exception :
<br />2006-03-27 21:56:06.394 TestCheckBoxes[816] An uncaught exception was raised<br />2006-03-27 21:56:06.405 TestCheckBoxes[816] [<NSTableColumn 0x336bf0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key enabled.<br />2006-03-27 21:56:06.433 TestCheckBoxes[816] *** Uncaught exception: <NSUnknownKeyException> [<NSTableColumn 0x336bf0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key enabled.<br /><br />TestCheckBoxes has exited due to signal 5 (SIGTRAP).<br />
Voici un mini-projet avec le problème. J'utilise un NSArrayController d'Elements, ceux-ci ayant 2 attributs : val1 et val2.
http://www.maestric.com/shared/cocoa/TestCheckBoxes.zip
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
La valeur à laquelle accède ton binding n'est apparemment pas un boolean d'après le log.
Au final, Enabled c'est un état ou une action possible ou pas, en fonction d'un contexte donné.
Dans la liste des controller keys du binding enabled tu vois assez bien les keys qui renvoient un boolean (isEditable, canAdd, canRemove...).
Par exemple pour un bouton Remove: , tu bind le enabled au arrayController dans lequel il supprime (controller key: canRemove). Si ta tableView est vide, il n'y a rien à supprimer, donc le bouton n'est pas actif.
Il n'y a pas de problème au niveau du type. J'ai un NSNumber, et le mécanisme des bindings sait fort bien le transformer en booléen et vice-versa.
J'ai finalement trouvé la réponse sur CocoaBuilder :
http://www.cocoabuilder.com/archive/message/cocoa/2005/2/12/128101
En résumé, il faut binder à la fois "enabled" et "editable" de la colonne.:o
Le mini-projet mis à jour :
http://www.maestric.com/shared/cocoa/TestCheckBoxes2.zip