attacher et retrouver des custom data à NSMenu
J'ai un Pb qui me semble simple ( et qui était trivial sous Carbon... ) .. et dont je ne trouve pas de solution dans cocoa
je souhaite associer des données privées à un menu résidant en Nib( pas à des menu items ) .
et pouvoir les relire dans la procédure menuNeedsUpdate ou menuWillOpen du delegate.
Dans IB , je vois qu'on peut attribuer des "User Defined Runtime Attributes" à un NSMenu.
J'ai donc attribué un attribut " ID, Number, 100" à un menu en Nib.
Mais impossible de savoir comment récupérer mes data quand j'ai reçu le NSMenu dans (void)menuNeedsUpdate:(NSMenu*)menu;
j'ai tenté :
Ivar ivar = class_getInstanceVariable([self class], "ID") renvoie null.. visiblement ID n'est pas variable d'instance...
menuID= [ menu valueForKey:@ID] crash...(_ this class is not key value coding-compliant for the key ID._)
Y a t'il un moyen de faire çà ?
Merci d'avance !
Paul
Réponses
Sous-classe
NSMenu
et rajoute une variable d'instanceID: NSNumber
non ? Dans le delegate tu castmenu
pour récupérer la valeur et c'est gagné.Les User Defined Runtime Attributes ça ne fonctionne que si les attributs existent. Je ne sais pas comment ça marche en Carbon.
merci pour la réponse . J'ai fait çà :
et dans le delegate :
je recupère nil pour menuID...
et dans le log je trouve ceci.. qui me semble indiquer que ce n'est pas possible :
Failed to set (ID) user defined inspected property on (NSMenu): [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key ID.
jai faux quelque part ??
paul
Euh oui et non.
Il faut que tu vérifies bien que
menu
est un objectMyMenu
:Maintenant
menuNeedsUpdate:
; c'est une méthode delegate ? À quel moment tu mets tes customs MyMenu ?euh.. l'ai le droit de sous-classer les menus de la barre principale ?
après essai.. oui j'ai le droit !.
et ca fonctionne !
Merci à tous pour votre aide.
Paul