Выйти из приложения после закрытия последнего окна

#cocoa #macos #nswindow #nsapplication

#cocoa #macos #nswindow #nsapplication

Вопрос:

Я хочу закрыть свое приложение, когда закроется последнее главное окно. Я не могу использовать applicationShouldTerminateAfterLastWindowClosed: по следующим причинам:
1. Перед отображением главного окна отображается одно окно подтверждения, и когда это окно закрыто, приложение не должно завершаться.
2. Приложение должно завершиться после закрытия главного окна, даже если какое-либо окно справки все еще открыто.

Ответ №1:

Вы все еще можете использовать applicationShouldTerminateAfterLastWindowClosed:

Запишите его для возврата NO до момента, когда вы впервые отобразите главное окно. С этого момента заставляйте его возвращаться YES .

Экземпляры NSPanel не учитываются при открытии окон. Таким образом, это сработает, если ваше окно справки является NSPanel.

Комментарии:

1. Это может быть одним из решений, для меня использование уведомления было проще.

Ответ №2:

Что вам нужно сделать, это установить свой управляющий класс в качестве делегата вашего главного окна, а затем с помощью NSNotificationCenter добавить наблюдателя с NSWindowWillCloseNotification, в котором объектом является yourWindow. Итак, вот так

 NSNotificationCenter *c = [NSNotificationCenter defaultCenter];
[c addObserver:self selector:@selector(yourSelector) name:NSWindowWillCloseNotification object:yourWindow];
  

Теперь метод yourSelector будет вызываться при закрытии главного окна, поэтому в этом методе просто есть что-то вроде exit(0);

Для получения дополнительной информации перейдите сюда и посмотрите на windowWillClose

Комментарии:

1. Я думаю, [NSApp terminate:self]; лучше, чем exit(0);.

2. Да, это было бы так, я просто приводил грубый пример.