IOS UIWebView获取404、504等错误问题解决方案

 更新时间:2016年11月03日 15:52:50   投稿:lqh  
这篇文章主要介绍了IOS UIWebView获取404、504等错误问题的相关资料,并对相应的错误问题提出相应的解决方案,需要的朋友可以参考下

UIWebView获取404、504等错误码

问题描述

    在使用webview时,会存在这么一个问题:
    如果访问服务器返回异常,比如404、504这样的错误,需要在native端展示特定的图片和文案(404、504酱紫的错误码有些不美观)。那么,问题就来了,怎样才能知道webview的访问出错了,是什么错???

问题分析

    从webview发起请求之后,能够查看webview加载状态的就是它的代理了,所以就从各个代理方法着手分析。

 // webview被指示加载内容时调用,返回YES才会进行加载
  - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
  // webview已经开始加载一个请求后调用
  - (void)webViewDidStartLoad:(UIWebView *)webView;
  // webview结束加载请求之后调用
  - (void)webViewDidFinishLoad:(UIWebView *)webView;
  // 请求加载中发生错误时调用
  - (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error;

    首先,肯定是从didFailLoadWithError代理方法入手,发现请求到404页面时,并没有调用该方法,这是为什么呢?原来,该方法时加载过程出现问题调用,我们顺利的得到了404页面,就不算加载过程的问题。

    然后,从网上搜索该问题,发现网友提供的方法都是使用sendSynchronousRequest方法返回NSHTTPURLResponse的状态码进行判断。可是,又出现了一个警告,sendSynchronousRequest在iOS9以后被弃用了,就用新的方法dataTaskWithRequest代理。

 'sendSynchronousRequest:returningResponse:error:' is deprecated: first deprecated in iOS 9.0 - Use [NSURLSession dataTaskWithRequest:completionHandler:]

    以上是获取状态码的方式,具体在哪个代理函数中处理,还得再看看:

    通过具体代码分析发现,放在shouldStartLoadWithRequest和webViewDid FinishLoad都可以得到相应的状态码,放在webViewDidStartLoad得到的状态码都是0.经过分析发现,调用webViewDidStartLoad方法时,request请求已经发起正在等待服务器处理结果。

问题解决

    综上,最终该问题就有两种处理方式了,分别是sendSynchronousRequest和dataTaskWithRequest。具体代码如下:

 // 方法一
  NSHTTPURLResponse *response = nil;
  [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
  NSLog(@"statusCode:%ld", response.statusCode);
   // 方法二
  NSURLSessionDataTask * dataTask = [[NSURLSession sharedSession] dataTaskWithRequest:webView.request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSHTTPURLResponse *tmpresponse = (NSHTTPURLResponse*)response;
    NSLog(@"statusCode:%ld", tmpresponse.statusCode);
  }];
  [dataTask resume];

    在shouldStartLoadWithRequest和webViewDidFinishLoad方法中都能获取到该状态码,具体可以根据业务需求确定。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • iOS开发中使用FMDB来使程序连接SQLite数据库

    iOS开发中使用FMDB来使程序连接SQLite数据库

    这篇文章主要介绍了iOS开发中使用FMDB来使程序连接SQLite数据库,SQLite是一个简单的嵌入式数据库,非常适合轻量级使用,需要的朋友可以参考下
    2015-11-11
  • 基于UIControl控件实现ios点赞功能

    基于UIControl控件实现ios点赞功能

    在开发当中,可能很多时候都需要做个点赞的需求,如果用按钮实现,按钮作为一个系统复合控件,外部是一个 View--》UIControl的容器,本文给大家分享一个基于UIControl控件实现ios点赞功能,需要的朋友可以参考下
    2015-09-09
  • iOS捕捉截屏事件并展示截图效果

    iOS捕捉截屏事件并展示截图效果

    这篇文章主要为大家详细介绍了iOS捕捉截屏事件并展示截图效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • iOS中MD5加密算法的介绍和使用

    iOS中MD5加密算法的介绍和使用

    MD5加密是最常用的加密方法之一,是从一段字符串中通过相应特征生成一段32位的数字字母混合码。对输入信息生成唯一的128位散列值(32个字符)。这篇文章就给大家介绍了iOS中MD5加密算法,已经iOS中MD5加密算法的使用,有需要的朋友们可以参考借鉴。
    2016-10-10
  • iOS多语言本地化流程的优化方案

    iOS多语言本地化流程的优化方案

    这篇文章主要给大家介绍了关于iOS多语言本地化流程的优化的相关资料,多语言本地化是我们大家在开发中经常会遇到的一个功能,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起看看吧。
    2018-01-01
  • 解决Xcode 8构建版本iTunes Connect获取不到应用程序状态的办法

    解决Xcode 8构建版本iTunes Connect获取不到应用程序状态的办法

    这篇文章主要介绍了关于解决Xcode 8构建版本iTunes Connect获取不到应用程序状态的办法,需要的朋友可以参考下
    2017-03-03
  • iOS10适配以及Xcode8使用需要注意的那些坑

    iOS10适配以及Xcode8使用需要注意的那些坑

    这篇文章主要为大家详细介绍了iOS10的适配以及Xcode8使用需要注意的那些坑,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • swift 单例的实现方法及实例

    swift 单例的实现方法及实例

    这篇文章主要介绍了swift 单例的实现方法及实例的相关资料,需要的朋友可以参考下
    2017-07-07
  • iOS实现多个垂直滑动条并列视图

    iOS实现多个垂直滑动条并列视图

    这篇文章主要为大家详细介绍了iOS实现多个垂直滑动条并列视图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • iOS中的实时远程配置全纪录

    iOS中的实时远程配置全纪录

    这篇文章主要给大家介绍了关于iOS中实时远程配置的相关资料,文中通过示例代码介绍的非常详细,对各位iOS开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-01-01

最新评论