Любой хороший способ установить статус выхода приложения Какао? - PullRequest
4 голосов
/ 30 апреля 2010

У меня есть приложение Какао, которое взаимодействует с сервером и отображает графический интерфейс. Если есть фатальная ошибка, я отображаю предупреждение и выхожу. Я хотел бы установить состояние выхода на ненулевое значение, чтобы отразить, что произошла ошибка, для простоты взаимодействия с некоторыми другими инструментами на основе UNIX.

К сожалению, я не смог найти хороший способ сделать это - NSApplication, похоже, не имеет никакого способа установить статус выхода. На данный момент я создал подкласс NSApplication и добавил exitStatus ivar (который я устанавливаю в моем делегате приложения при необходимости), затем переопределил -terminate:, чтобы он вызывал exit(exitStatus). Это прекрасно работает, но мне кажется немного шероховатым, не говоря уже о том, что я могу упустить что-то важное, что стандарт terminate: делает за кулисами. Я не могу вызвать [super terminate:sender] в своем подклассическом методе, потому что это exit() s, не давая мне возможности установить статус.

Я что-то упускаю из виду?

Ответы [ 2 ]

5 голосов
/ 30 апреля 2010

Короче говоря, вы либо набираете exit(3) и полностью игнорируете стандартные механизмы разрыва какао или , но вы не можете установить код выхода (без перехода через обручи, как вы описали.

Как уже упоминал Джейсон, в системе нет ничего критического *1007*, что происходит во время демонтажа приложения. С другой стороны, в вашем приложении может быть что-то критическое, но это полностью из-за реализации вашего приложения (по умолчанию в Какао нет ничего).

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

1 голос
/ 30 апреля 2010

Существуют и другие более чистые методы взаимодействия с инструментами на основе Unix. Например, вы можете смоделировать код завершения, написав некоторый код в текстовом файле, откуда инструменты могут его забрать, не взламывая приложение для возврата кода. Также можно использовать стандартный вывод / консоль приложения.

...