UIWebView - 错误处理最佳实践

时间:2014-10-03 12:45:37

标签: ios

我正在尝试找出最合适的方法来处理在UIWebView中加载页面时可能发生的错误。

如果我发现网络相关问题或与服务器相关的问题,我想提醒用户。我无法找到有关要检查的特定错误代码的任何详细信息。这就是我现在所拥有的:

NSInteger errorCode = [error code];

NSString* title = nil;
NSString* message = nil;

if (errorCode == NSURLErrorNetworkConnectionLost || errorCode == NSURLErrorNotConnectedToInternet) {
    title = @"Error";
    message = @"The network connection appears to be offline.";
}

if (errorCode == NSURLErrorTimedOut || errorCode == NSURLErrorBadServerResponse) {
    title = @"Error";
    message = @"There was an error loading the request. Please try again later.";
}

if (title != nil) {
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    alert.tag = TAG_WEB_ERROR;
    [alert show];
}

我是否在检查错误代码?有关更好地检查和处理潜在错误的方法的想法吗?

3 个答案:

答案 0 :(得分:4)

部分错误代码在NSURLError.h中定义 例如NSURLErrorTimedOut

if ([error.domain isEqualToString:NSURLErrorDomain]) {
   if(error.code == NSURLErrorTimedOut) {
      ...
   }
}

不确定UIWebView是否返回了完整的错误代码集。 并且没有像NSError-s这样的东西,你需要检查代码和域。

答案 1 :(得分:1)

假设您在视图控制器中使用UIWebView,您可以将视图控制器设置为UIWebView的委托,并从UIWebViewDelegate协议实现以下方法

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    alert.tag = TAG_WEB_ERROR;
    [alert show];
}

答案 2 :(得分:0)

也许没有直接回答你的问题(我是否检查了正确的错误代码?),但在NSError的上下文中NSURLErrorDomain CFNetworkErrors和{{1}}。

该列表在整齐格式的表格中包含可能的错误代码,错误域和相关原因。