我想了解如何才能正确捕获并向用户显示异常原因,这些异常是在处理viewDidLoad时出现的?我试图像这样解决这个问题,但是我遇到了显示AlertWindow的问题。 错误:由于未捕获的异常,无法识别的选择器发送到实例并终止应用程序。
- (void)viewDidLoad {
@try {
[super viewDidLoad];
APPDataBase *sharedDataBase = [APPDataBase sharedDataBase];
self.navigationItem.hidesBackButton = YES;
recievedArray = [recievedURL componentsSeparatedByString:@" "];
[self fillUpTableViewWithTitles];
if ([self isInternetConnected]){
[sharedDataBase saveData:feeds WithKey:@"savedFeeds"];
}
else
{
feeds = [sharedDataBase loadDataWithKey:@"savedFeeds"];
}
[NSException raise:@"Invalid smth" format:@"Error error error, dangerous, wow"];
}
@catch (NSException *exception) {
[self showAlertWindowWithString:exception];
}
}
showAlertWindowWithString:方法代码
-(void)showAlertWindowWithString:(NSString *)string{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:string message:@"Press OK button." preferredStyle:UIAlertControllerStyleAlert];
alertController.view.frame = [[UIScreen mainScreen] applicationFrame];
[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
[self okButtonTapped];
}]];
UIViewController *topRootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topRootViewController.presentedViewController){
topRootViewController = topRootViewController.presentedViewController;
}
[topRootViewController presentViewController:alertController animated:YES completion:nil];
}
我搞砸了一下,因为我只能访问iDevice Emulator,所以我想至少以这种方式捕获“真实设备”错误。或者,也许,在发生此类异常时,还有其他方法可以使应用程序不崩溃吗?
答案 0 :(得分:0)
您正在将NSException *
传递给showAlertWindowWithString:
方法但是以NSString *
方式接收,但string
仍然是NSException
- 然后您通过此方法到alertControllerWithTitle
- 只要该方法尝试对NSString
执行NSException
操作,您就会收到无法识别的选择器异常。
您可以执行以下操作:
@catch (NSException *exception) {
[self showAlertWindowWithString:exception.reason];
}
但实际上,@try/@catch
并不是Objective C iOS编程中的常见范例。简单地检查错误并采取适当的措施或显示用户友好的警报更为常见。消息。通常应在开发期间识别异常,并确定异常的根本原因。