J'ai un élément de la barre d'état qui ouvre un NSMenu, et j'ai un ensemble de délégués et il est branché correctement (-(void)menuNeedsUpdate:(NSMenu *)menu
fonctionne très bien). Cela dit, cette méthode est configurée pour être appelée avant que le menu ne soit affiché, je dois l'écouter et déclencher une requête asynchrone, mettre à jour le menu pendant qu'il est ouvert, et je n'arrive pas à comprendre comment cela est censé être fait .Comment Apple met-il à jour le menu Airport lorsqu'il est ouvert? (Comment modifier NSMenu quand il est déjà ouvert)
Merci :)
EDIT
Ok, je suis maintenant ici:
Lorsque vous cliquez sur l'élément de menu (dans la barre d'état), un sélecteur est appelé qui exécute un NSTask. J'utiliser le centre de notification pour écouter quand cette tâche est terminée, et écrire:
[[NSRunLoop currentRunLoop] performSelector:@selector(updateTheMenu:) target:self argument:statusBarMenu order:0 modes:[NSArray arrayWithObject:NSEventTrackingRunLoopMode]];
et ont:
- (void)updateTheMenu:(NSMenu*)menu {
NSMenuItem *mitm = [[NSMenuItem alloc] init];
[mitm setEnabled:NO];
[mitm setTitle:@"Bananas"];
[mitm setIndentationLevel:2];
[menu insertItem:mitm atIndex:2];
[mitm release];
}
Cette méthode est certainement appelé parce que si je clique sur le menu et immédiatement en arrière dessus, je reçois un menu mis à jour avec cette information en elle. Le problème est qu'il ne se met pas à jour (le menu est ouvert).
Malgré le temps qui s'est écoulé depuis la question, j'ai toujours été curieux à ce sujet et je suis si heureux de voir pourquoi ce que j'avais ne fonctionnait pas. Je vous remercie! – Aaron