Plusieurs Notifications pour un même delegate
chaps31
Membre
Toujours actif dans Xcode aujourd'hui...
J'ai un problème simple, lorsqu'une combobox change je veux qu'elle envoie une notifiaction à une classe que j'ai créé pour l'exécution de diverses actions, impec "- (void)comboBoxSelectionDidChange:(NSNotification *)notification" est fait pour ça, c'est très simple, ça marche très bien.
Le hic c'est que cette classe va recevoir la même notification (DidChange) de combobox différentes, avec des réactions différentes, comment les différencier ??? J'ai épluché le net un bouquin, AppKido pas de solution... La notification en question à une variable "userInfo" null, je comptais utiliser la variable "object" de la notification:
sauf que si Combobox1 est le nom de mon IBOutlet ça ne marche pas car isEqualTo dans ce cas là compare les adresses mémoires... Comment faire ??? Merci.
J'ai un problème simple, lorsqu'une combobox change je veux qu'elle envoie une notifiaction à une classe que j'ai créé pour l'exécution de diverses actions, impec "- (void)comboBoxSelectionDidChange:(NSNotification *)notification" est fait pour ça, c'est très simple, ça marche très bien.
Le hic c'est que cette classe va recevoir la même notification (DidChange) de combobox différentes, avec des réactions différentes, comment les différencier ??? J'ai épluché le net un bouquin, AppKido pas de solution... La notification en question à une variable "userInfo" null, je comptais utiliser la variable "object" de la notification:
if [[notification object] isEqualTo: Combobox1]{....
sauf que si Combobox1 est le nom de mon IBOutlet ça ne marche pas car isEqualTo dans ce cas là compare les adresses mémoires... Comment faire ??? Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Les tag de l'objet sont atteingnable : [[notification objet]tag]
Et le tour est joué, désolé pour le dérangement... ::)
Donc tu peux aussi faire :
Si ça marche.
C'est ton code qui est foireux.
L'IBOutlet c'est l'adresse de l'objet instancié par IB.
C'est aussi ce que renvoie la méthode object de NSNotification.
Un même objet (ta combo) ne peut pas avoir 2 adresses différentes, du moins dans notre réalité.
== est simplement l'opérateur C de comparaison. Ici on compare 2 adresses mémoire.
Un test entre [notification object] et l'outlet correspondant est tout à fait possible! Et heureusement!
Ceci dit avec les tag ça marche, si un truc vous saute aux yeux dans ce que je viens de dire surtout n'hésitez pas car j'ai un NSTextField qui ne réagi pas à mon code malgré le lien avec un IBOutlet... Je deviens fou là ... :crackboom:-
Je passe sans doute à coté de quelque chose...
- en affichage seul, le NSTextField est un... NSTextField.
- en édition active (curseur dedans), le NSTextField s'efface pour laisser place à un NSText (objet dont le rôle est l'édition de texte).
Dans des cas particuliers, une notification semblant émanée d'un NSTextField en cours d'édition peut en fait avoir pour origine le NSText attaché (donc l'outlet pointant sur le textField est différent du object de la notification qui vient de NSText).
Mais détecter ce type de comportement montre peut être un code mal fait (car dans la majeure partie des cas, le programme n'a pas à se soucier de ce que fait NSText).
Tout comme indiqué ici d'ailleurs.
Donc ça ne devrait pas venir de là ...
Ce qui est d'autant plus étonnant c'est que si la comparaison avec le "tag" fonctionne, c'est que c'est le bon objet. Y'a un souci sur l'IBOutlet que tu compares avec [tt][notification object][/tt] je vois rien d'autre.
Faudrait mettre des NSLogs dans ta méthode de notification pour afficher la valeur à la fois de ton IBOutlet et de [tt][notification object][/tt], ainsi que leurs className, tag, etc... histoire de mieux comprendre
Pour le NSCombobox et la notification, heu ho... un alloc-init qu'est-ce qu'il fout là ? Je le vire et le == marche très bien entre mon IBoutlet et la variable object de notification. Bon en fin de compte je préfère utiliser les tag avec un switch je trouve ça plus... propre.... je préfère.
Autre règle du programmeur amateur : jamais plus de 2 heures de code d'affilé...
Merci à tous d'être toujours aussi présent et patient, si je croise un de vous dans ma belle ville de Toulouse faudra que je lui paie un coup...
PS : mon code était bien "foireux"... :P
Oui, il ne faut pas confondre IBOutlet et .. IB Boulet ! ;D
PS : Si tu nous invites à Toulouse, on y va tous, prépare le cassoulet .