[TRUKéASTUCE] Menu avec une plist
fouf
Membre
Quand on a un menu avec un grand nombre d'items qui pointent vers le meme selecteur, il est souvent plus pratique de creer une plist puis de creer un menu avec celle-ci. Cela a en plus l'avantage de pouvoir modifier le menu sans toucher du tout au code.
Voila le code pour creer un menu avec un NSArray, une cible et un selecteur :
(faites juste attention avec la gestion memoire : j'ai mis un autorelease, jsais pas si c'est tres bien ???)
Vos sugestions pour ameliorer le code ?? Je suis ouvert a toutes les propositions.
Voila le code pour creer un menu avec un NSArray, une cible et un selecteur :
<br />- (NSMenu*) initMenuWithArray:(NSArray *)array target:(id)aTarget selector:(SEL)selector<br />{<br /> NSMenu *menu;<br /> int i;<br /> //NSMenuItem *item;<br /> menu = [[[NSMenu alloc] init]autorelease];<br /> for(i = 0;i<[array count];i++){<br /> <br /> NSString *title = [array objectAtIndex:i];<br /> NSMenuItem *item = [[NSMenuItem alloc] init];<br /> [item setTitle:title];<br /> if (aTarget != nil){<br /> [item setTarget:aTarget];<br /> }<br /> <br /> if (selector != NULL){<br /> [item setAction:selector];<br /> }<br /> [item setKeyEquivalent:@""];<br /> <br /> [menu addItem:item];<br /> <br /> [item release]; //item is retained by menu<br /> }<br /><br /> return menu;<br />}<br />
(faites juste attention avec la gestion memoire : j'ai mis un autorelease, jsais pas si c'est tres bien ???)
Vos sugestions pour ameliorer le code ?? Je suis ouvert a toutes les propositions.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
donc il faut appeler le "designated initializer" de la classe NSMenu, avec [super initWithTitle: title] si c'est une sous-classe, ou [self initWithTitle: title] si c'est une catégorie.
en outre, plutôt que d'allouer une nouvelle instance de NSMenu, tu as self qui est déjà là ...
on pourrait modifier comme suit:
et puis on pourrait ajouter le titre dans les paramètres, et aussi renommer initMenuWithArray... en initWithArray... (si on veut vraiment pinailler)
par contre, si c'est une méthode destinée à être ajoutée dans un contrôleur, ton code est ok, mais appelle la plutôt makeMenuWithArray, ou quelque chose comme ça...
d
D'accord, mais je trouve que ca fait beaucoup de parametres alors qu'il suffit juste de rajouter [menu setTitle:titre];
J'ai fait , c'est mieux
Tu risque d'avoir une erreur de redéfinition de variable dans ta boucle.
C'est vrai que ca ferait plus propre de mettre les NSMenuItem *item en dehors de la boucle, mais j'ai une excuse :P : j'ai fait ce code il ya un an a peu près, alors que je commencais juste en Cocoa