Ваш делегат приложения не является приложением. Он должен наследоваться от NSObject, а не от NSApplication.
Почему это важно
NSApplication является одноэлементным. Его метод init
всегда возвращает первый экземпляр NSApplication или любого подкласса, отбрасывая любые последующие объекты, которые вы (или загрузчик nib) можете вызывать init
on.
Итак, вы настроили объект приложения в качестве своего собственного делегата. Объект, который вы намеревались сделать делегатом, умер во втором вызове init
, и объект приложения занял его место.
Изменение объекта приложения в качестве экземпляра вашего подкласса также сработало бы, но у вас все равно было бы приложение в качестве его собственного делегата, что нечисто и, возможно, опасно (NSApplication может в частном порядке реализовать некоторые из своих методов делегата самостоятельно, так как они просто методы обработки уведомлений). Единственное правильное решение состоит в том, чтобы ваш класс делегата приложения не наследовал от NSApplication.