gpt4 book ai didi

iphone - 在 iPhone 顶级异常处理程序中显示警报

转载 作者:太空狗 更新时间:2023-10-30 03:28:15 24 4
gpt4 key购买 nike

我试图在顶级 iPhone 异常处理程序中显示 UIAlertView。处理函数如下所示:

void applicationExceptionHandler(NSException *ex) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:[ex reason]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}

我在别处看到过类似的代码(例如,NSSetUncaughtExceptionHandler not catch all errors on iPhone)。

如果我在调试器中单步执行,我可以看到调用了异常处理程序,我可以看到当前屏幕变暗,好像它要在它前面显示警报,但什么也没有出现。在调试器之外,应用会立即退出并返回到系统主屏幕。

如果我在 applicationDidFinishLaunching 中捕获错误并在返回之前在那里显示警报,它确实有效。我假设警报 View 永远不会有机会在异常处理程序中显示,因为应用程序正在终止(而不是坐在那里什么都不做,如果我只是退出 applicationDidFinishLaunching)。有什么办法可以做到这一点吗?

最佳答案

非常感谢 benzado,这是我认为很棒的通用顶级异常处理程序。我是初学者,所以希望它能正确完成,但它确实有效:)

在我的 ...appDelegate.m 中:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[window makeKeyAndVisible];

NSSetUncaughtExceptionHandler(&exceptionHandler);

return YES;
}

BOOL exceptionAlertDismissed = FALSE;
void exceptionHandler(NSException *exception)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"App Committed Suicide"
message:@"Oh dear, that wasn't supposed to happen. You will have to restart the application... sorry!"
delegate:[[UIApplication sharedApplication] delegate] cancelButtonTitle:nil otherButtonTitles:@"That's ok!", @"Erm, bye...", nil];
[alert show];
[alert release];

while (exceptionAlertDismissed == FALSE)
{
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
exceptionAlertDismissed = TRUE;
}

在我的 ...appDelegate.h 中:

@interface ...appDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate>
...
void exceptionHandler(NSException *exception);

关于iphone - 在 iPhone 顶级异常处理程序中显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1787254/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com