Подтвердить что ты не робот

Как я могу передать приложение Cocoa для выхода из самого приложения?

Я ищу хороший способ сказать моему приложению Cocoa выйти из себя. Будьте уверены, что это не будет использоваться для производственного кода. Я просто ищу простой способ запустить один тест, а затем закрыть приложение во время отладки.

Я обнаружил, что exit(0); закроет приложение, но оно обходит все обычные процедуры выхода приложения, и я хотел бы сохранить их все на месте.

По сути, я хочу, чтобы все работало так, как будто пользователь вытащил "Выйти" из меню, но я хочу, чтобы это произошло автоматически после того, как я закончил свой тест.

В настоящее время мой код выглядит следующим образом:

#if (SUPERFANCY_TESTING_MODE)
    [self doSomething];
    exit(0); // <-- I need something better to go here
#endif
4b9b3361

Ответ 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.