Что вам не хватает, так это то, что принятие протокола делает объекты типа CoolClass готовыми функционировать в качестве делегатов любого объекта NSApplication (при условии, что вы выполните декларацию и реализуете все необходимые методы протокола). Объявление соответствия протоколу также предотвращает предупреждения компилятора, когда вы устанавливаете экземпляры класса в качестве делегата приложения.
Но для того, чтобы конкретный объект приложения (скажем, общий объект NSApplication, который создает для вас Cocoa) знал, чтобы отправлять сообщения из протокола на конкретный объект CoolClass, вы должны установить объект, для которого вы хотите получать эти сообщения, как определенный делегат объекта приложения.
Это означает, что за некоторое время до того, как приложение отправит сообщения, которые вы хотите получить, что-то должно создать экземпляр объекта CoolClass - назовите его c
- и скажите приложению: «Эй, ваш делегат c
здесь, так что отправляйте сообщения делегата маленькому валенщику с этого момента. "
То, что сводится к тому, что эти строки кода должны выполняться до завершения запуска приложения:
CoolClass *c = [[CoolClass alloc] init];
[[NSApplication sharedApplication] setDelegate:c];
Самый простой способ добиться этого - позволить Интерфейсному Разработчику сделать всю работу за вас: пусть перо MainMenu создает экземпляр CoolClass, а также устанавливает классный объект класса в качестве делегата приложения при загрузке кончика, как предлагали другие.
Для этого откройте MainMenu.xib. Перетащите пользовательский объект в XIB и измените его класс на CoolClass в инспекторе. Удерживая клавишу Ctrl (или перетащите правой кнопкой мыши) от объекта приложения в XIB к объекту CoolClass, выберите «делегировать». Сохраните, соберите и запустите.