Désactiver des cases à  cocher dans une table avec les bindings

maestricmaestric Membre
07:28 modifié dans API AppKit #1
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 :

<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] [&lt;NSTableColumn 0x336bf0&gt; 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: &lt;NSUnknownKeyException&gt; [&lt;NSTableColumn 0x336bf0&gt; 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

Réponses

  • cargocargo Membre
    07:28 modifié #2
    Le binding enabled c'est un boolean.
    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.
  • maestricmaestric Membre
    07:28 modifié #3
    Salut Cargo, merci pour ta réponse.

    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
Connectez-vous ou Inscrivez-vous pour répondre.