applicationWillTerminate вызывается при сбое - PullRequest
3 голосов
/ 18 августа 2011

У меня есть приложение, которое должно знать, когда оно упало (для целей отладки). Когда приложение закрывается, оно вызывает - (void)applicationWillTerminate:(UIApplication *)application в делегате.

Насколько я понимаю, она НЕ ДОЛЖНА вызывать эту строку при сбое приложения, но по какой-то причине это происходит. (У меня есть код, который устанавливает значение в NSUserDefaults, если приложение НЕ аварийно завершает работу, но не меняет ничего, если оно ПОЛУЧИЛ аварийно.)

Несколько особенностей: когда вызывается - (void)applicationDidBecomeActive:(UIApplication *)application, клавиша NSUserDefaults в моей программе установлена ​​в YES. Когда вызывается - (void)applicationWillTerminate:(UIApplication *)application, тот же ключ устанавливается на NO. При следующем запуске приложение проверяет, установлен ли для этого же ключа значение YES или NO. План состоял в том, чтобы проверить, был ли ключ ДА, и если это было, это означает, что это не закрылось правильно (то есть, разбился).

Что я должен использовать вместо этого, чтобы проверить, разбился он или нет?

1 Ответ

5 голосов
/ 18 августа 2011

Ваша проблема при записи в NSUserDefaults не обязательно синхронизирует это значение с диском.Как правило, NSUserDefaults будет синхронизировать изменения на диске каждые 30 секунд или около того.Происходит следующее: вы сохраняете YES в NSUserDefaults, а затем аварийно завершаете работу перед синхронизацией на диск, поэтому при следующем запуске он снова возвращается к NO.Исправление здесь заключается в вызове -[NSUserDefaults synchronize] после сохранения значения YES для немедленной синхронизации диска.

Обратите внимание, поскольку -synchronize относительно дорог, его следует использовать только в случае крайней необходимостичтобы значение записывалось на диск немедленно.Случай, который вы описываете, соответствует требованиям.Очень немногие другие случаи делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...