Próbuję wyświetlić UIAlertView w obsłudze wyjątków dla iPhone'a najwyższego poziomu. Funkcja obsługi wygląda następująco:Wyświetlanie alertu w wyjątku obsługi wyjątków najwyższego poziomu w telefonie iPhone
void applicationExceptionHandler(NSException *ex) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:[ex reason]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
Widziałem podobny kod gdzie indziej (na przykład NSSetUncaughtExceptionHandler not catch all errors on iPhone).
Jeśli wykonam jeden krok w debugerze, widzę, że wywoływacz wyjątków jest wywoływany i widzę, że bieżący ekran jest przyciemniony, tak jakby wyświetlał alert przed nim, ale nic nie pojawia się. Poza debuggerem, aplikacja po prostu wychodzi natychmiast i wraca do ekranu głównego systemu.
To działa, jeśli pułapkę błąd w applicationDidFinishLaunching i wyświetlać alert przed powrotem. Zakładam, że widok alertu nigdy nie ma szansy na wyświetlenie w procedurze obsługi wyjątków, ponieważ aplikacja się kończy (w przeciwieństwie do siedzenia tam, nie robiąc nic, jeśli po prostu wyskoczę z aplikacjiDidFinishLaunching). Czy istnieje sposób, aby to zadziałało?
"[[NSRunLoop currentRunLoop] Run]" załatwiło sprawę. Dzięki! –
Dzięki, napisałem inne rozwiązanie do tego wątku w oparciu o twoją odpowiedź. –
Czy na pewno trzeba wyświetlić komunikat o błędzie użytkownikowi? Być może najlepiej byłoby, gdyby w milczeniu poradzić sobie z tym wyjątkiem i nie musisz się martwić, że i tak rozwiązałeś ten problem. –