好吧,不知道这是否会对您有所帮助,但在我的应用程序中,我设法向UIAlertView
用户展示了有关崩溃、异常类型、其描述和堆栈跟踪(全部使用该NSSetUncaughtExceptionHandler
方法)的解释,如下所示:
然后,尽管应用程序可能不稳定,我还是提供了终止应用程序或继续的推荐选项。就我而言,它部分影响了应用程序的功能,因此在大多数情况下,用户可以保存其工作并安全地关闭应用程序。
如果您愿意,我可以编辑答案并在此处发布代码(我必须搜索我的 Xcode 项目文件夹,这就是我没有发布它的原因)。
编辑:
在 AppDelegate 委托的方法上willFinishLaunchingWithOptions
,我设置了NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
然后我创建处理程序方法如下:
static void uncaughtExceptionHandler(NSException *exception)
{
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"kDisculpe", nil) message:[NSString stringWithFormat:@"%@ %@%@ %@%@ %@", NSLocalizedString(@"kErrorText", nil), [exception name], NSLocalizedString(@"kErrorDescripcion", nil), [exception reason], NSLocalizedString(@"kErrorTrazaPila", nil), [exception callStackReturnAddresses]] delegate:[[UIApplication sharedApplication] delegate] cancelButtonTitle:NSLocalizedString(@"kContinuar", nil) otherButtonTitles:NSLocalizedString(@"kSalir", nil), nil] show];
[[NSRunLoop currentRunLoop] run];
}
然后在我设置的 AlertView 的委托方法上clickedButtonAtIndex
:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if ([[alertView title] isEqualToString:NSLocalizedString(@"kDisculpe", nil)]) {
switch (buttonIndex) {
case 0:
if ([[alertView title] isEqualToString:NSLocalizedString(@"kDisculpe", nil)]) {
[[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"kAdvertencia", nil) message:NSLocalizedString(@"kAppContinuaraInestable", nil) delegate:[[UIApplication sharedApplication] delegate] cancelButtonTitle:NSLocalizedString(@"kContinuar", nil) otherButtonTitles:nil] show];
}
break;
case 1:
exit(0);
break;
}
}
}
请注意,我所做的唯一重要的事情是[[NSRunLoop currentRunLoop] run];
我希望这会对您有所帮助。