国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS UIWebView獲取404、504等錯誤問題解決方案

2020-07-26 03:06:56
字體:
來源:轉載
供稿:網友

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方法中都能獲取到該狀態碼,具體可以根據業務需求確定。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵川县| 镇坪县| 湖北省| 靖江市| 英吉沙县| 巴林左旗| 长宁县| 大竹县| 黄浦区| 邢台县| 乌拉特前旗| 湘潭县| 龙川县| 格尔木市| 沈阳市| 称多县| 岢岚县| 建德市| 类乌齐县| 秦皇岛市| 庄浪县| 潼关县| 巨鹿县| 烟台市| 白银市| 富源县| 贵南县| 沂源县| 水城县| 将乐县| 寿阳县| 海南省| 雷波县| 祁门县| 河津市| 古田县| 永仁县| 安阳市| 改则县| 五指山市| 公安县|