- Je certains sous-menu inséré comme sous-menu de l'élément de fenêtre du menu principal
- J'ai une instance de mon objet (supposons que son nom de classe est MenuController) hérité de NSObject et supporte deux procédés de NSMenuDelegate: - numberOfItemsInMenu: - Menu: updateItem: atIndex: shouldCancel:
- Cet exemple ajouté en tant Blue-objet dans NIB de réveil lors de l'exécution
- objet à partir des étapes 2-3 configurées comme délégué pour le sous-menu (étape 1)
Maintenant, je peux fournir le contenu du sous-menu en cours d'exécution.force NSMenu (sous-menu imbriqué) mise à jour du menu principal de l'App Cocoa
Ensuite, je fais ce qui suit: Je peux ajouter de nouveaux éléments ou supprimer les anciens d'un tableau (à l'intérieur de MenuController qui contient des titres de menus) qui sont mappés au sous-menu réel via protocole et délégué. Tout fonctionne très bien. Sauf une chose: j'aime attribuer des raccourcis à mes éléments de menu dynamiques. CMD-1, CMD-2, CMD-3, etc
Fenêtre/MySubmenu/MyItem1 CMD-1, MyItem2 CMD-2, ...
Donc, pour appeler certains articles que je ne veux pas aller à la fenêtre/MySubmenu/MyItem pour cliquer dessus avec la souris, je veux appuyer sur un seul raccourci, comme CMD-3 pour appeler l'élément.
Ok, périodiquement cela fonctionne comme prévu. Mais, généralement, je n'ai aucun moyen d'informer le menu principal sur mes changements de sous-menu imbriqués, sauf ouvrir le menu Window/MySub pour recharger son contenu. Une manière stable de reproduire le problème - juste essayer de supprimer un élément et appuyez sur son ancien raccourci affecté, après avoir créé un nouvel élément comme remplacer pour supprimé - bingo - raccourci ne fonctionnera pas avant de naviguer dans le menu Fenêtre/MySub pour voir le sous-menu actuel contenu.
Je ne sais pas un moyen de forcer le menu principal pour reconstruire ses sous-menus ... Je essayé: [[NSApp mainMenu] mise à jour] et les jeux avec NSNotificationCenter pour envoyer NSMenuDidAddItemNotification, NSMenuDidRemoveItemNotification, NSMenuDidChangeItemNotification
J'ai essayé sortie à mon sous-menu et appel à mettre à jour la méthode explicitement - il n'y a aucun moyen ... Parfois, AppKit appelle mes méthodes de délégué - et je vois cela, parfois il ne veut rien appeler. On dirait une stratégie aléatoire.
Comment puis-je m'assurer que, après "certains appels", mon sous-menu sera dans l'état actuel après des modifications internes de la matrice?
pour empêcher le deadloop avec la mémoire mangeant (si aucun menu n'a été initialisé encore la première fois avec l'appel nul) - dans le menuNeedsUpdate a eu besoin d'une condition additionnelle: si (! Menu) return;/* avant le compte = ... * / – UncleMiF