"Что вы делали, когда приложение рухнуло?"восстановление - PullRequest
3 голосов
/ 17 августа 2011

ОБНОВЛЕНО!Проверьте после фотографии.

Все,

Сегодня я играл с приложением для iPhone (Photovine) и заметил функцию, которую я ЛЮБЛЮ включить в свое приложение.Я добавлял фотографию в приложение, когда приложение потерпело крах.Ничего страшного, я думал, я просто открою это.Когда я снова открыл его, BAM, UIAlertView выскочил с небольшим текстовым полем, которое спросило меня: «Что вы делали, когда приложение рухнуло?»до публикации вопроса я не мог найти, как это реализовать.

Кто-нибудь знает, как это сделать?

enter image description here

** РЕДАКТИРОВАТЬ: Для любого, кто пытается это, не забудьте синхронизировать ваш NSUserDefaults, чтобы заставить его работатьправильно.Метод NSUserDefaults отлично работает, если вы синхронизируете его после записи в YES.Просто позвоните [NSUserDefaults synchronize];, и вы станете золотым.

Ответы [ 4 ]

2 голосов
/ 17 августа 2011

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

Этот код установит обработчики для необработанных исключений и сигналов, которые приводят к завершению работы вашей программы.

void InstallUncaughtExceptionHandler() {
    NSSetUncaughtExceptionHandler(&HandleException);
    signal(SIGABRT, SignalHandler);
    signal(SIGILL, SignalHandler);
    signal(SIGSEGV, SignalHandler);
    signal(SIGFPE, SignalHandler);
    signal(SIGBUS, SignalHandler);
    signal(SIGPIPE, SignalHandler);
}

Функции SignalHandler и HandleException должны:

  1. Установите флаг, используя NSUserDefaults, чтобы указать на сбой, и сохраните любую другую информацию, которая может быть полезна (например, время, чтобы вы могли определить, какие данные идут с каким сбоем).
  2. Удалите обработчик сигнала или исключения, чтобы шаг 3 вызвал сбой.
  3. Переслать сигнал или исключение. Это приведет к фактическому сбою, создав журнал сбоев.

В вашем методе didFinishLunchingWithOptions: вы должны проверить этот флаг. Если вы найдете его, вы откроете окно для сбора информации от пользователя и отправки ее себе. Затем уберите флаг.

2 голосов
/ 17 августа 2011

Без кода - но основная идея:

  1. Когда приложение запускается, вы сохраняете какое-то свойство, скажем, «creash» как YES.
  2. Когда вы обычно закрываете приложение, вы устанавливаете его на NO.

Теперь, когда вы запускаете приложение, вы проверяете, установлено ли для этого свойства значение YES или NO, чтобы указать на сбой.

1 голос
/ 17 августа 2011

Одна вещь, которую вы могли бы сделать, это использовать NSUserDefaults для регистрации времени, когда приложение запускается или перемещается на передний план, затем, когда приложение завершается или перемещается в фоновый режим, вы можете регистрировать время выхода (потому что в фоновом режимеApple может прекратить действие вашего приложения в любое время без предварительного уведомления.При каждом запуске просто убедитесь, что время закрытия приложения> времени запуска приложения, в противном случае это, вероятно, был сбой.

1 голос
/ 17 августа 2011

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

Проверьте метод делегата приложения:

- (void)applicationWillTerminate:(UIApplication *)application
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...