Как я могу передать приложение Cocoa для выхода из самого приложения?
Я ищу хороший способ сказать моему приложению Cocoa выйти из себя. Будьте уверены, что это не будет использоваться для производственного кода. Я просто ищу простой способ запустить один тест, а затем закрыть приложение во время отладки.
Я обнаружил, что exit(0);
закроет приложение, но оно обходит все обычные процедуры выхода приложения, и я хотел бы сохранить их все на месте.
По сути, я хочу, чтобы все работало так, как будто пользователь вытащил "Выйти" из меню, но я хочу, чтобы это произошло автоматически после того, как я закончил свой тест.
В настоящее время мой код выглядит следующим образом:
#if (SUPERFANCY_TESTING_MODE)
[self doSomething];
exit(0); // <-- I need something better to go here
#endif
Ответы
Ответ 1
Вы можете быть уверены, что ваше приложение будет убито, по крайней мере, некоторое время. Таким образом, требуется защита от выходов, подобных exit(0);
.
Однако NSApplication реализует метод -terminate:
.
[NSApp terminate: nil];
должен делать то, что вы хотите.
Обычно я предлагаю отправить его через -performSelector:afterDelay:
с задержкой 0.0, чтобы заставить его произойти в верхней части следующего прохода через цикл событий.
Пример:
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
Ответ 2
Похоже, что [NSApp terminate: id] устарел. Итак, как @bbum состояния, используйте это:
[NSApp performSelector:@selector(terminate:) withObject:nil afterDelay:0.0];
Он работает так, как я ожидаю, добавляя пункт меню "Выход" в меню строки состояния приложения LSUIElement.