Нажатие на красную кнопку не закрывает приложение, отчасти потому, что этот глагол не совпадает с этим существительным. Красная кнопка закрывает окно, в котором она включена; оно не выходит из вашего приложения. (Приложение может иметь и будет иметь несколько окон в Mac OS X.)
Вот где приходит applicationShouldTerminateAfterLastWindowClosed:
. Всякий раз, когда пользователь закрывает последнее окно на экране (нажатием красной кнопки, выбором «Закрыть» в меню «Файл» или другими способами), объект NSApplication будет applicationShouldTerminateAfterLastWindowClosed:
сообщение его делегату, чтобы спросить его, должно ли приложение завершиться. Если делегат отвечает на сообщение, возвращая YES
, приложение завершает свою работу.
Вы не говорите точно, как вы «используете» applicationShouldTerminateAfterLastWindowClosed:
. Если вы просто отправляете его какому-либо объекту, это не сработает, потому что вы задаете вопрос («должно ли приложение завершиться после закрытия последнего окна?»), А затем игнорируете ответ. Если вы реализуете метод в объекте, но этот объект не является делегатом приложения, это тоже не сработает - объект приложения только отправляет это сообщение своему делегату.
Вам необходимо реализовать метод в своем делегате и возвращать YES
, когда уместно завершить приложение, когда пользователь закрывает свое последнее окно.