Problème NSMenuItem

18:08 modifié dans Vos applications #1
Bonjour,

Alors voilà , j'ai un NSMenu contenant des NSMenuItem ayant tous la même action.
Je compile l'application, je l'execute.
Je fait apparaà®tre mon menu, je sélectionne un item, ça marche.
Maintenant je sélectionne un autre item ou encore le même et voilà  ce que le log me fait apparaà®tre
2006-02-27 15:08:02.526 iFreete[6115] *** -[NSMenuItem object]: selector not recognized [self = 0x4d411a0]

L'action n'est pas executée et j'ai aucune erreur lors de la création de mes item

Heu j'ai manqué un truc ?  :o

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur
    18:08 modifié #2
    Ca me fait penser à  un release non souhaité...
    Ou un autorelease mal placé...


  • 18:08 modifié #3
    Le debugueur se lance ?
  • 18:08 modifié #4
    Non, l'application tourne sans problème mais mon action n'est pas executée :(
    Je crois bien avoir tout placé niveau release
  • LeChatNoirLeChatNoir Membre, Modérateur
    18:08 modifié #5
    ben ou alors, c'est l'objet dans lequel tu définis l'action qui a été shooté et quand ton NSItemMenu tente de balancer l'action, ça déconne.

    Non ?
  • 18:08 modifié #6
    ça se pourrait mais pourquoi ?
    J'ai tenté en ne changeant pas de menu et en selectionnant le même item.
    Le premier coup marche
    Le second m'envoie l'erreur ds le log.
    Le programme tourne sans problème.

    Pourtant j'ai un autre NSMenu dont les items ont aussi tous la même actions mais pas la même que le NSMenu qui a un pb. Et là , pas de merde  :p
  • 18:08 modifié #7
    J'ai des news,

    Je vous explique l'affaire :
    J'ai deux boutons, un "Link" et un "Download"
    Les deux ont 2 menus différents et je les complète à  partir d'une array "websiteURL" et une array "downloadURL"

    <br />// Menus<br />	NSArray *menuArray;<br />	NSEnumerator *e;<br />	id object;<br />	<br />	linkMenu = [[NSMenu alloc] init];<br />	downloadMenu = [[NSMenu alloc] init];<br />	<br />	menuArray = [freeware objectForKey:@&quot;websiteURL&quot;];<br />	e = [menuArray objectEnumerator];<br />	<br />	<br />	while ( object = [e nextObject] ) {<br />		[linkMenu addItemWithTitle:[object objectForKey:@&quot;name&quot;]<br />					action:@selector(getLink:) keyEquivalent:@&quot;&quot;];<br />		[[linkMenu itemAtIndex:[menuArray indexOfObject:object]] setImage:[NSImage imageNamed:@&quot;MenuLink&quot;]];<br />	}<br />	[linkMenu retain];<br />	[TBLinkButton setMenu:linkMenu];<br />	<br />	menuArray = [freeware objectForKey:@&quot;downloadURL&quot;];<br />	e = [menuArray objectEnumerator];<br /><br />	while ( object = [e nextObject] ) {<br />		[downloadMenu addItemWithTitle:[object objectForKey:@&quot;name&quot;]<br />					action:@selector(getDownload:) keyEquivalent:@&quot;&quot;];<br />		[[downloadMenu itemAtIndex:[menuArray indexOfObject:object]] setImage:[NSImage imageNamed:@&quot;MenuDownload&quot;]];<br />	}<br /><br />	[downloadMenu retain];<br />	[TBDownloadButton setMenu:downloadMenu];<br />
    

    Je n'ai pas oublié le dealloc qui contient le release des menu.

    Alors voilà , je clique sur mon bouton "Download", je vois le menu avec ses items. Je selectionne un menuItem, l'action getDownload: est executée.
    Je clique maintenant sur mon bouton "Link", les menuItem sont disabled (pourtant ils étaient enabled avant de cliquer sur un item du menu "Download")
    Je re-selectionne un menuItem ds le menu "Download" :
    2006-02-27 21:02:47.629 iFreete[7387] *** -[NSMenuItem object]: selector not recognized [self = 0x391150]


    :why?:
  • 18:08 modifié #8
    Encore du new, j'ai viré le contenu de mon action "getDownload:" et là  j'ai plus de soucis  :(renaud): (je pisse sur les soucis)
    Alors je vous file le contenu de l'action :
    <br />- (void)getDownload:(id)sender<br />{<br />	NSString *url;<br />	NSDictionary *dico;<br /><br />	if([tableView selectedRow]==0){<br />		if(!fom)<br />			[self getfom:[tableView freewaresArray]];<br />		dico = fom;<br />	}else<br />		dico = [tableView currentDictionary];<br />	url = [[[dico objectForKey:@&quot;downloadURL&quot;] objectAtIndex:[downloadMenu indexOfItem:sender]] objectForKey:@&quot;URL&quot;];<br /><br />	// User want to download with iFreete ?<br />	if([prefs boolForKey:PREFS_DOWNLOADS]){<br />		if(!dwnC){<br />			dwnC = [[DownloadController alloc] init];<br />			[dwnC loadWindow];<br />		}<br />		dico = [NSDictionary dictionaryWithObjectsAndKeys:[dico objectForKey:@&quot;name&quot;], @&quot;appName&quot;,<br />														[[dico objectForKey:@&quot;downloadURL&quot;] objectAtIndex:[downloadMenu indexOfItem:sender]],@&quot;infos&quot;,nil];<br />		[[NSNotificationCenter defaultCenter] postNotificationName:@&quot;StartDownload&quot; object:dico];<br />	<br />		[dwnC showWindow:self];<br />	}else // else open with default web browser<br />		[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:url]];<br />}
    


    Et désolé si le code vous paraà®t dégeulasse  ;)
  • 18:08 modifié #9
    un ptit UP car j'ai trouvé

    j'ai éliminé petit à  petit les bout de l'action "getDownload:"
    et voilà  que si j'enlève la ligne :
    <br />[dwnC loadWindow];
    

    je n'ai plus aucun soucis.
    M'enfin c'est bizarre tout de même  ???
Connectez-vous ou Inscrivez-vous pour répondre.