У вас правильная идея.Есть два способа включить пункты меню, как описано в Включение пунктов меню .При автоматическом включении система проверит цепочку респондента на предмет поиска объектов, которые реализуют действие для каждого элемента в меню.Если он находит респондента с соответствующим действием, он активирует этот пункт меню.
Итак, вы подключили свой пункт меню к первому респонденту и реализовали то же действие в своем классе FileMenuController
,Другие вещи, которые вам нужно сделать:
- Убедитесь, что
FileMenuController
наследуется от NSResponder, чтобы он мог быть частью цепочки респондента - Создайте экземпляр
FileMenuController
и убедитесь, что это часть цепочки респондента.
По правде говоря, вам, вероятно, не нужен отдельный объект для управления меню «Файл».Вместо этого вы обычно помещаете свое действие -openDocument:
в делегат приложения, поскольку это всегда является частью цепочки респондента и потому что открытие документа - это то, что делает приложение (в отличие, скажем, от окна или представления).Другие команды в том же меню, такие как «Сохранить», «Сохранить как», «Закрыть» и «Печать», будут реализованы не делегатом приложения, а документом, контроллером окна или любым другим объектом, управляющим документом / файлом.Таким образом, команда «Открыть» будет в значительной степени всегда включена (поскольку делегат приложения почти всегда находится в цепочке респондента), но «Сохранить», «Закрыть» и «Печать» будут включены только при наличии документа, доступного для обработки этих команд.
Для полноты информации другим способом управления включением пунктов меню является ручной способ, в котором вы специально устанавливаете состояние включения / выключения каждого элемента.Я не думаю, что это то, что вы хотите для этой задачи.