NSPopUpButton item et identifiant
Rocou
Membre
Est-il possible d'associer un identifiant à un item de NSPopUpButton?
La raison à ma question est simple:
exemple:
Je récupère d'une base de données une liste de clients.
J'initialise mon NSPopUpButton avec cette liste de clients.
Je voudrais ensuite faire des recherches dans la base de données sur le client sélectionné. Mais bien sûr, partir du nom affiché n'est pas très judicieux, il vaut mieux partir de l'identifiant (unique) du client. C'est cet identifiant que je voudrais associer au nom du client sélectionné.
Dois-je programmer cela "à l'ancienne", c'est à dire en ajoutant un NSPopUpButton invisible dans lequel je stockerais les identifiants? (ce NSPopUpButton réagirait en parallèle à celui contenant le nom des clients)
La raison à ma question est simple:
exemple:
Je récupère d'une base de données une liste de clients.
J'initialise mon NSPopUpButton avec cette liste de clients.
Je voudrais ensuite faire des recherches dans la base de données sur le client sélectionné. Mais bien sûr, partir du nom affiché n'est pas très judicieux, il vaut mieux partir de l'identifiant (unique) du client. C'est cet identifiant que je voudrais associer au nom du client sélectionné.
Dois-je programmer cela "à l'ancienne", c'est à dire en ajoutant un NSPopUpButton invisible dans lequel je stockerais les identifiants? (ce NSPopUpButton réagirait en parallèle à celui contenant le nom des clients)
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci, je n'étais pas sûr d'avoir compris ce passage tellement cela me paraissait merveilleux! :adios!:
Bon, je n'y arrive pas.
setRepresentedObject ne permet pas d'associer un objet à un item à un index précis.
J'ai essayé setTag mais le problème est le même.
Si je fais:
//j est un NSNumber et monPopup est un NSPopUpButton
[monPopup setTag:j];
NSLog(@tag: %@", [monPopup tag]);
ça semble fonctionner mais si j'essaie d'utiliser ailleurs dans mon code [monPopup tag], il n'y a plus rien dedans (null)
Après tu as plusieurs solutions de toute façon pour différencier les items d'un NSPopupMenu : utiliser un couple target/action différent pour chaque item, utiliser un tag, un representedObject... Mais tout ça se fait sur chaque NSMenuItem de ton PopupMenu et non sur le PopupMenu lui-même !
D'accord. J'ai donc adapté mon code qui se compile très bien mais l'application plante:
NSString *k=[leDico valueForKey:@id];
NSInteger j=[k integerValue];
NSMenu* monMenu = [monPopup menu];
NSMenuItem *monMenuItem = [monMenu itemAtIndex:i]; //ce code est dans une boucle...
[monMenuItem setTag:j]; //ça plante ici.
:fouf):
setTag reçoit un int pas un NSNumber !
Pou gérer les representedObject, il vaut mieux créer un NSMenuItem plutôt que de faire addItemWithTitle:
A quoi correspond la variable pCBM ? Es-tu sûr que c'est bien un objet NSMenuItem ? Quelle erreur récupères-tu lors du plantage de l'application ?
Une erreur de copier-coller. J'ai corrigé.
il faut lire: [monMenuItem setTag:j];
Sinon, je ne récupère aucune erreur, le debugger se lance et c'est tout.
Bon, je me suis inspiré de ton bout de code et cela semble fonctionner. Par contre, je ne suis pas sûr de mes allocations et de mes release (aucun...)
NSString *k=[leDico valueForKey:@id];
NSInteger j=[k integerValue];
NSMenu* monMenu = [monPopup menu];
[[monMenu itemAtIndex:i] setTag:j];
Mais si l'ID est un nombre, tu peux mettre un NSNumber dans ton dico, plutôt qu'un NSString.
Il faut que je me plonge davantage dans la doc de PostgreSQL (l'ID est issu d'une table de base de données PostgreSQl).
Mais en tout cas, merci pour le coup de main.
Merci à tous.