comboBoxSelectionDidChange, "did" vous êtes sûr ?

chaps31chaps31 Membre
21:19 modifié dans API AppKit #1
Bonjour à  tous,

Petit soucis, j'ai 2 combobox, les items de la cbb2 dépendent de la valeur prise par la cbb1.

Naà¯vement j'ai implémenté "comboBoxSelectionDidChange", et lorsque la sélection change dans la cbbox1 je fais modifier le tableau source de la cbb2 (dans la fonction "comboBoxSelectionDidChange"). Mais ça ne marche pas...

Le tableau source de la cbb2 change bien mais en tenant compte de la valeur précédent le changement dans la cbb1... Pas en tenant compte de la nouvelle valeur prise après le changement... D'où le titre... "comboBoxSelectionDidChange" devrait s'appeler "comboBoxSelectionIsGoingToChange" ;)

Une idée ? Merci

Réponses

  • dilarogadilaroga Membre
    21:19 modifié #2
    La notification NSComboBoxSelectionDidChangeNotification est bien envoyée après le changement d'une combobox. Cette notification est postée par chaque combobox donc par ta combobox 2 également lorsque la selection change. Il faut donc tester avec l'objet attaché à  la notification quelle combobox t'a envoyé la notification.
    Si ça ne vient pas de là , poste un exemple de ton implementation pour comprendre ton problème (comment tu récupères la valeur de la combobox 1 et comment tu effectues le changement sur la combobox 2)...
  • chaps31chaps31 Membre
    21:19 modifié #3
    - (void)comboBoxSelectionDidChange:(NSNotification *)notification<br />{<br />	switch ([[notification object] tag])<br />	{<br />		case 0 :<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ......code......<br />		case 2 :<br />			........code.......<br />			break;<br />		case 3 :	<br />			........code.......<br />		case 6 : <br />			........code.........<br />			NSPredicate *predicateForRace = [NSPredicate predicateWithFormat:@&quot;SELF.especes==%@&quot;, [espece stringValue]];<br />			[racesSelectedTab setArray:[[espRce filteredArrayUsingPredicate:predicateForRace] valueForKey:@&quot;races&quot;]];<br />			<br />			<br />			 <br />	}<br />}<br />
    


    Les tag correspondent aux différentes combobox, donc pas de problème de mélange de notification... "espece" est ma cbb1, "racesSelectedTab" est mon tableau source de ma cbb2, "espRce" est un tableau qui ne change pas et est une variable d'instance.

    Merci
  • dilarogadilaroga Membre
    21:19 modifié #4
    [espece stringValue]
    

    Ca te donne la valeur de la sélection de la cbb1 ?
    Mieux vaut utiliser des méthodes appropriées pour manipuler la sélection de la combobox comme par exemple objectValueOfSelectedItem.
  • chaps31chaps31 Membre
    21:19 modifié #5
    Oui ça me donne la valeur, mais malheureusement celle d'avant le changement...

    Pour le objectValueOfSelectedItem je ne peux pas à  partir du moment où j'utilise un datasource...
  • dilarogadilaroga Membre
    21:19 modifié #6
    indexOfSelectedItem avec ça tu peux trouver l'objet sélectionner dans ta datasource.
  • chaps31chaps31 Membre
    21:19 modifié #7
    Les grands esprits se rencontrent, j'y ai pensé mais idem avec le datasource inutilisable...  :crackboom:-
  • dilarogadilaroga Membre
    21:19 modifié #8
    indexOfSelectedItem
    j'y ai pensé mais idem avec le datasource inutilisable...

    Ah ? La doc pourtant ne précise rien à  ce sujet ce qui laisse penser que cette méthode est utilisable avec un combobox en mode datasource...
  • chaps31chaps31 Membre
    21:19 modifié #9
    Excuse mon imprecision... En effet cette méthode est utilisable mais elle me retourne l'index et il me faut la valeur... ET...  Tu m'as fait réfléchir...

    Si à  partir de l'index je ne peux pas accéder à  la valeur correspondante de la combobox pour cause de datasource, par contre je peux accéder à  la valeur du tableau source de ma combobox qui a le même index !

    Bon sang j'avais déjà  utilisé ce système et j'avais oublié...

    Ca marche !!!    <3 <br />
    Merci beaucoup, on raisonne toujours mieux à  plusieurs cerveaux  :P
Connectez-vous ou Inscrivez-vous pour répondre.