Como posso fazer uma pausa meu aplicativo até que um relatório acidente foi apresentado?
-
11-09-2019 - |
Pergunta
Fundo
-
Eu estou usando UKCrashReporter em meu aplicativo.
-
Eu instalei meu próprio Uncaught Exception Handler.
-
Eu estou a criação do managedObjectContext do objecto activeItemController em applicationDidFinishLaunching (1)
O Problema
Se o método managedObjectContext lança uma exceção, a caixa de diálogo repórter acidente única pisca antes as falhas de aplicativos e para que o usuário nunca fica para relatar o acidente.
Eu quero meu aplicativo para continuar apenas depois o acidente foi relatado, não enquanto a janela está mostrando.
O que eu tentei
-
Se UKCrashReporterCheckForCrash () eram um método C objectivo, presumo Eu poderia chamá performSelectorOnMainThread: waitUntilDone: SIM mas não é.
-
Eu olhei para algum outro Stack perguntas de estouro sobre usando Condicional Locks para pausar apps, mas eu não consigo entender como eu usá-lo para uma função C.
Como é que eu vou fazer isso de uma maneira agradável? As pessoas tem algum conselho para mim? Quaisquer respostas seria muito apreciado.
O Código
// 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]];
}
Update 1
Já me pediram para obter mais detalhes sobre o que eu estou tentando fazer, então aqui vai.
O bug que desencadeou esse pensamento foi uma exceção ao mesclar managedObjectModels. Meu aplicativo foi pego em um loop impressão "Uncaught excepção" para o console a cada poucos milissegundos.
E quando eu instalei o manipulador de exceção não capturada antes essa exceção aconteceu, eu pegaria o comportamento descrito -. Meu aplicativo iria acender, exibir brevemente a janela de Relato de acidente, em seguida, continuar a carga e falhar novamente
Resumo - Eu quero ser capaz de erros identificador que acontecem na inicialização
.(1) Eu não estou usando ligações de fazer isso, como eu pensava ligações faria testar a classe mais problemático.
Solução
Eu acho que o problema é com o pensamento dele como "pausar" a sua aplicação. Pense nisso mais como um estado UI inicial diferente. Suas tentativas de bloquear o ciclo prazo irá evitar qualquer janela interativa a partir de ... bem, ser interativo. : -)
Sua melhor aposta é para mostrar a interface do usuário principal (e fontes de dados de conexão, etc) somente se o "eu estou levando o usuário a enviar um relatório de crash" método diz "não, vá em frente e iniciar normalmente". Caso contrário, mostrar a sua janela e, quando o usuário envia ou recusa-se a enviar o relatório, feche a janela e pedir seu controlador aplicativo para continuar a inicialização normal.
Eu olhei para UKCrashReporterCheckForCrash () e ele não aparece para criar uma janela de qualquer tipo. Ele se limita a sustentar o acidente. Você poderia descrever o que está fazendo com mais detalhes?