#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. Да, это было бы так, я просто приводил грубый пример.