- У меня есть несколько подменю, вставленных как подменю Window в главном меню
- У меня есть экземпляр моего объекта (предположим, что его имя класса - MenuController), унаследованного от NSObject и поддерживающего 2 из методов NSMenuDelegate:
- numberOfItemsInMenu:
- меню: updateItem: atIndex: shouldCancel:
- Этот экземпляр добавлен как Blue-Object в NIB для пробуждения во время выполнения
- Объект из шагов 2-3 настроен как делегат для подменю (шаг 1)
Теперь я могу предоставить содержимое подменю во время выполнения.
Далее я делаю следующее: я могу добавлять новые элементы или удалять старые из массива (внутри MenuController, который содержит заголовки меню), который отображается в реальном подменю с помощью протокола и делегата.
Все работает просто отлично.
За исключением одного: я люблю назначать ярлыки для своих динамических пунктов меню.
CMD-1, CMD-2, CMD-3 и т. Д.
Окно / MySubmenu / MyItem1 CMD-1, MyItem2 CMD-2, ...
Итак, для вызова некоторых предметов я не хочу идти в Window / MySubmenu / MyItem, чтобы щелкать по нему мышью, я хочу нажать всего одну комбинацию клавиш, например CMD-3, чтобы вызвать предмет.
Хорошо, периодически это работает, как ожидалось. Но, как правило, я не могу сообщить Главному меню о своих вложенных изменениях в подменю, кроме как открыть окно / MySubmenu, чтобы перезагрузить его содержимое.
Один стабильный способ воспроизвести проблему - просто попытайтесь удалить какой-либо элемент и нажмите назначенный ему старый ярлык, после того как вы создадите новый элемент вместо замененного удаленного - bingo - ярлык не будет работать, прежде чем вы перейдете в Window / MySubmenu для просмотра текущего содержимого подменю. .
Я не знаю, как заставить главное меню перестроить подменю ...
Я пытался: [[NSApp mainMenu] update] и игры с NSNotificationCenter для отправки NSMenuDidAddItemNotification, NSMenuDidRemoveItemNotification, NSMenuDidChangeItemNotification
Я попытался выйти в подменю и явно вызвать метод обновления - нет пути ...
Иногда AppKit вызывает мои методы делегата - и я вижу это, иногда он не хочет ничего вызывать. Похоже на случайную стратегию.
Как я могу убедиться, что после "некоторого вызова" мое подменю будет в текущем состоянии после изменений внутреннего массива?