Question

Historique

  • J'utilise UKCrashReporter dans mon application.

  • J'ai installé mon propre Uncaught Exception Handler.

  • Je suis mise en place du managedObjectContext de l'objet activeItemController en applicationDidFinishLaunching (1)

Le problème

Si la méthode de managedObjectContext lance une exception, la boîte de dialogue de l'accident ne reporter clignote avant que les application se bloque et que l'utilisateur ne fait jamais de signaler l'accident.

Je veux que mon application à continuer que après l'accident a été signalé, pas alors que la fenêtre est affichée.

Ce que j'ai essayé

  • Si UKCrashReporterCheckForCrash () étaient une méthode objective C, je suppose Je pourrais appeler performSelectorOnMainThread: waitUntilDone: OUI mais ce n'est pas.

  • J'ai regardé une autre pile des questions de débordement sur à l'aide Locks conditionnelle pour mettre en pause des applications, mais je ne comprends pas comment je l'utilise pour une fonction C.

Comment dois-je à faire cela d'une manière agréable? Est-ce que les gens ont des conseils    pour moi? Toutes les réponses seraient beaucoup    apprécié.

Le code

// 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]];
}

Mise à jour 1

J'ai demandé plus de détails sur ce que je suis en train de le faire, il faut en tenir.

Le bug qui a déclenché cette réflexion a été une exception lors de la fusion managedObjectModels. Mon application se est pris dans une impression de boucle « Uncaught exception » toutes les quelques millisecondes à la console.

Et quand j'ai installé le gestionnaire d'exception uncaught avant cette exception a eu lieu, j'obtenir le comportement décrit -. Mon application XDarwin démarrait, afficher brièvement dialogue du rapport d'accident, puis continuer à charger et plantage à nouveau

Résumé - Je veux être en mesure de gérer les erreurs qui se produisent au démarrage

.

(1) Je ne suis pas en utilisant les liaisons de le faire, car je pensais que les liaisons feraient tester la classe plus problématique.

Était-ce utile?

La solution

Je pense que votre problème est avec la pensée de celui-ci comme « pause » de votre application. Pensez plus comme un état de l'interface utilisateur initiale différente. Vos tentatives pour bloquer la boucle d'exécution empêchera toute fenêtre interactive de ... eh bien, être interactif. : -)

Votre meilleur pari est de montrer votre interface principale (et connecter les sources de données, etc.) que si le « Suis-je demander à l'utilisateur de soumettre un rapport d'accident » méthode Says « non, aller de l'avant et commencer normalement ». Dans le cas contraire, montrez votre fenêtre et, lorsque l'utilisateur envoie ou refuse d'envoyer le rapport, fermez la fenêtre et demandez à votre contrôleur de l'application pour continuer le démarrage normal.

Je regardais UKCrashReporterCheckForCrash () et il ne semble pas créer une fenêtre d'aucune sorte. Elle fait valoir simplement l'accident. Pourriez-vous décrire ce que vous faites avec plus de détails?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top