Как приостановить приложение, пока не будет отправлен отчет о сбое? - PullRequest
1 голос
/ 02 декабря 2009

Фон

  • Я использую UKCrashReporter в своем приложении.

  • Я установил свой собственный Uncaught Обработчик исключений.

  • Я настраиваю managedObjectContext объекта activeItemController в applicationDidFinishLaunching (1)

Проблема

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

Я хочу, чтобы мое приложение продолжало работать только после сообщения о сбое, а не при отображении окна.

Что я пробовал

  • Если UKCrashReporterCheckForCrash () были объективным методом С, я полагаю Я мог позвонить performSelectorOnMainThread: waitUntilDone: ДА но это не так.

  • Я посмотрел на другой стек Переполнение вопросов о использовании Условные блокировки для приостановки приложений, но я не могу понять, как бы я это использовал для функции C.

Как бы я поступил так хорошо? Есть ли у людей какие-либо советы для меня? Любых ответов было бы много оценили.

Код

// In app delegate

-(void)applicationWillFinishLaunching:(NSNotification *)aNotification {
        UKCrashReporterCheckForCrash();   // A C function which then creates a window if
                                          // it detects a crash has happened.
}

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    [activeItemController setMoContextDisk:[self managedObjectContext]];
    [activeItemController setMoContextMemory:[self managedObjectContextMemory]];
}

Обновление 1

Меня попросили предоставить более подробную информацию о том, что я пытаюсь сделать, так что вот так.

Ошибка, вызвавшая такое мышление, была исключением при объединении managedObjectModels. Мое приложение зацикливалось на выводе на консоль «Uncaught исключения» каждые несколько миллисекунд.

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

Сводка. Я хочу обрабатывать ошибки, возникающие при запуске.

(1) Я не использую привязки для этого, так как я думал, что привязки сделают тестирование класса более проблематичным.

1 Ответ

1 голос
/ 02 декабря 2009

Я думаю, что ваша проблема в том, чтобы думать, что это «приостановка» вашего приложения. Думайте об этом больше как о другом начальном состоянии пользовательского интерфейса. Ваши попытки заблокировать цикл выполнения не позволят интерактивному окну ... быть интерактивным. : -)

Лучше всего показывать основной интерфейс пользователя (и подключать источники данных и т. Д.) Только в том случае, если метод «Я предлагаю пользователю отправить отчет о сбое» говорит «нет, продолжайте и начните нормально». В противном случае покажите свое окно и, когда пользователь отправит или отклонит отправку отчета, закройте окно и попросите контроллер приложения продолжить нормальный запуск.

Я посмотрел на UKCrashReporterCheckForCrash (), и он, похоже, не создает какого-либо окна. Это просто передает крах. Не могли бы вы описать, что вы делаете, более подробно?

...