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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top