1. 程式人生 > >iOS NSURLErrorDomain Code=-999

iOS NSURLErrorDomain Code=-999

iOS  NSURLErrorDomain Code=-999

前言

今天有一個線上bug,是分配給提供H5的團隊的,但是後臺查不出來原因。於是讓前端iOS幫忙查一查原因。

今天,交給我來幫忙查原因,但是問題在網路好的狀態下並不必現,很難去定位問題的根本原因。最後只能到測試旁邊連線測試專用的慢網環境,然後才能必現。

剛進入介面時是載入一個H5頁面,當點選H5頁面上的某個按鈕的時候,會通過webview攔截到scheme,然後去走介面請求資料,得到資料後再載入H5頁面。此時,走了webview載入失敗的回撥。

加斷點,打印出來的error資訊是:

 
Error Domain=NSURLErrorDomain Code=-999 “The operationcouldn’t becompleted.
 

然後,筆者進入NSURLError.h中檢視-999代表什麼對應的key是什麼:

 
NS_ENUM(NSInteger)
{
    NSURLErrorUnknown =            -1,
    NSURLErrorCancelled =          -999,
    NSURLErrorBadURL =              -1000,
    NSURLErrorTimedOut =            -1001,
    NSURLErrorUnsupportedURL =          -1002,
    NSURLErrorCannotFindHost
=          -1003,     NSURLErrorCannotConnectToHost =        -1004,     NSURLErrorNetworkConnectionLost =      -1005,     NSURLErrorDNSLookupFailed =        -1006,     NSURLErrorHTTPTooManyRedirects =        -1007,     NSURLErrorResourceUnavailable =        -1008,     NSURLErrorNotConnectedToInternet =      -1009
,     NSURLErrorRedirectToNonExistentLocation =  -1010,     NSURLErrorBadServerResponse =      -1011,     NSURLErrorUserCancelledAuthentication =    -1012,     NSURLErrorUserAuthenticationRequired =  -1013,     NSURLErrorZeroByteResource =        -1014,     NSURLErrorCannotDecodeRawData =            -1015,     NSURLErrorCannotDecodeContentData =        -1016,     NSURLErrorCannotParseResponse =            -1017,     NSURLErrorAppTransportSecurityRequiresSecureConnection NS_ENUM_AVAILABLE(10_11, 9_0) = -1022,     NSURLErrorFileDoesNotExist =        -1100,     NSURLErrorFileIsDirectory =        -1101,     NSURLErrorNoPermissionsToReadFile =    -1102,     NSURLErrorDataLengthExceedsMaximum NS_ENUM_AVAILABLE(10_5, 2_0) =  -1103,          // SSL errors     NSURLErrorSecureConnectionFailed =      -1200,     NSURLErrorServerCertificateHasBadDate =    -1201,     NSURLErrorServerCertificateUntrusted =  -1202,     NSURLErrorServerCertificateHasUnknownRoot = -1203,     NSURLErrorServerCertificateNotYetValid =    -1204,     NSURLErrorClientCertificateRejected =  -1205,     NSURLErrorClientCertificateRequired =  -1206,     NSURLErrorCannotLoadFromNetwork =      -2000,          // Download and file I/O errors     NSURLErrorCannotCreateFile =        -3000,     NSURLErrorCannotOpenFile =          -3001,     NSURLErrorCannotCloseFile =        -3002,     NSURLErrorCannotWriteToFile =      -3003,     NSURLErrorCannotRemoveFile =        -3004,     NSURLErrorCannotMoveFile =          -3005,     NSURLErrorDownloadDecodingFailedMidStream = -3006,     NSURLErrorDownloadDecodingFailedToComplete =-3007,       NSURLErrorInternationalRoamingOff NS_ENUM_AVAILABLE(10_7, 3_0) =        -1018,     NSURLErrorCallIsActive NS_ENUM_AVAILABLE(10_7, 3_0) =                    -1019,     NSURLErrorDataNotAllowed NS_ENUM_AVAILABLE(10_7, 3_0) =                  -1020,     NSURLErrorRequestBodyStreamExhausted NS_ENUM_AVAILABLE(10_7, 3_0) =      -1021,          NSURLErrorBackgroundSessionRequiresSharedContainer NS_ENUM_AVAILABLE(10_10, 8_0) = -995,     NSURLErrorBackgroundSessionInUseByAnotherProcess NS_ENUM_AVAILABLE(10_10, 8_0) = -996,     NSURLErrorBackgroundSessionWasDisconnected NS_ENUM_AVAILABLE(10_10, 8_0)= -997, };  

找到了吧!!!NSURLErrorCancelled就是-999,它代表請求被取消的意思。

根本原因

出現NSURLErrorDomain Code=-999的根本原因是什麼呢?其實就是因為webview在之前的請求還沒有載入完成,下一個請求發起了,此時webview會取消掉之前的請求,因此會回撥到失敗這裡。

因此,在處理Webview的載入失敗的回撥時,要注意攔截掉被取消的請求。

解決方案

在webview載入失敗時,新增如下程式碼來判斷:

 
- (void)webView:(UIWebView *)webViewdidFailLoadWithError:(NSError *)error {
  [self stopAnimating];
  
  // 如果是被取消,什麼也不幹
  if([errorcode] == NSURLErrorCancelled)  {
    return;
  }
  
  // 後續失敗處理
}
 

最後

如果大家遇到同樣的問題,請不要著急,這個bug不一定是後臺的,也不一定是前端的,因此彼此應該要互相配合,共同找到問題的根本原因。

由於安卓也有同樣的問題,但是復現率沒有iOS的高,在筆者找出根本原因後,H5人員與安卓端描述,希望安卓端也能統一改,但是描述不清楚,導致安卓這邊有意見。於是叫筆者過來幫忙解釋原因,講了半天,安卓的leader說不可能~不會的~不應該~不影響~

發現跟安卓溝通要是不懂一點安卓,真心容易被人忽悠。當然,最後還是要改的,事實都擺在面前了,還能有什麼藉口可以逃避!

希望大家在遇到同樣的問題時,淡定!溝通協作共同解決問題。

相關推薦

iOS NSURLErrorDomain Code=-999

iOS  NSURLErrorDomain Code=-999 前言 今天有一個線上bug,是分配給提供H5的團隊的,但是後臺查不出來原因。於是讓前端iOS幫忙查一查原因。 今天,交給我來幫忙查原因,但是問題在網路好的狀態下並不必現,很難去定位問題的根本原因。最後只能到測試

Error Domain=NSURLErrorDomain Code=-999 請求取消

1、錯誤一:Error Domain=NSURLErrorDomain Code=-999 導致原因: 1、一個頁面沒有被完全載入之前收到下一個請求,此時迅速會出現此error,error=-999 2、此時可能已經載入完成,則忽略此error,繼續進行載入。 2、錯

Error Domain=NSURLErrorDomain Code=-999錯誤

有時候遇到這個錯誤:Error Domain=NSURLErrorDomain Code=-999 “The operation couldn’t be completed. - (void)webView:(UIWebView *)webView didFailLo

Error Domain=NSURLErrorDomain Code=-999

  載入h5頁面遇到這個問題導致載入很慢。 NS_ENUM(NSInteger) {     NSURLErrorUnknown = -1,     NSURLErrorCancelled = -999,     NSURLErrorBadURL = -100

iOS AFNetworking load failed with error Error Domain=NSURLErrorDomain Code=-1001 "The request ti問題解決

在使用 AFNetworking 進行伺服器資料的請求時,出現瞭如下錯誤: 根據列印的錯誤資訊,我們可以發現,這是網路請求超時引起的,所以對程式碼修改如下: AFHTTPSessionManager *manager = [AFHTTPSession

iOS知識---webView載入網址報錯Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded beca

xcode在使用webView載入網頁的時候可能會遇到載入不出來的報錯問題, App Transport Security has blocked a cleartext HTTP (http://)

iOS Error = NSURLErrorDomain Code=-1022 " 錯誤解決

匯入一個SDK 裡面網路返回error 報Code = -1022 ,後來發現為題所在 由於iOS9以後,需要App的網路協議裡面都必須使用HTTPS協議! 與原來的http不相容 , 解決:

iOS xcode 7網路請求錯誤failure Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded

在我們使用(xocde7.0)開啟以前的專案時,發現之前的專案在原來的版本上都沒有問題,在xcode7.0上網路請求部分發生了錯誤,會看到有這麼一段東西輸出在控制檯(據說7.1沒那問題); 2015-11-20 16:12:16.569 AFNetworkin

AFN3.0 PATCH請求報錯Error Domain=NSURLErrorDomain Code=-1012 "(null)"

我試圖執行一個HTTP PATCH請求,但我不斷收到錯誤域= nsurlerrordomain程式碼= 1012錯誤。我的程式碼: //封裝的請求方法 + (void)requestMethod:(NSString *)method urlStr:(NSStr

真機除錯報錯error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已斷開與網際網路的連線。"

真機除錯報錯error ==Error Domain=NSURLErrorDomain Code=-1009 "似乎已斷開與網際網路的連線。" 請注意,錯誤程式碼是-1009,網上關於網路連結查詢錯誤程式碼的網站很多,查詢一下,會發現 -1009 kCFURLErrorN

關於使用UIWebView載入HTTPS站點出現NSURLErrorDomain code=-1202

最近在做push 資訊到facebook中。當使用UIWebview載入https的站點時webview總是會報NSURLErrorDomain code=-1202,導致網頁載入失敗。自己列印錯誤和網上搜索是因為證書失效,https使用超文字安全傳輸協議,即超文字傳輸協議

Hybrid----優秀開原始碼解讀之JS與iOS Native Code互調的優雅實現方案

轉載自:http://blog.csdn.net/yanghua_kobe/article/details/8209751 簡介 它優雅地實現了在使用UIWebView時JS與ios 的ObjC nativecode之間的互調,支援訊息傳送、接收、訊息

安裝xcode6 beta 後調試出現Unable to boot the iOS Simulator以及編譯蘋果官方Swift的demo報錯failed with exit code 1的解決的方法

imu fonts mat 詳細說明 watermark data- 重新啟動 技術分享 說明 蘋果昨天公布新語言Swift(雨燕),須要安裝xcode6 以及mac os 系統為10.9以上。 (xcode6 beta 可在官方下載。須要登錄開發人員賬號;mac os

iOS Code Signing: 解惑詳解

唯一標識 解惑 並且 iphone 條件 等於 個人開發 視覺 電腦 原文鏈接地址:http://www.cnblogs.com/andyque/archive/2011/08/30/2159086.html iPhone開發的代碼簽名 代碼簽名確保代碼的真實以及明確識

iOS Provisioning Profile(Certificate)與Code Signing詳解

使用 簡析 win8 計算 sta 得到 三方 tair agent 摘自:http://blog.csdn.net/phunxm/article/details/42685597 引言 關於開發證書配置(Certificates & Ident

iOS-Code-Snippet

1.單行註釋 /** <#單行註釋#> */ 2.mark註釋 #pragma mark - <#Mark-註釋#> 3.可變陣列 /** <#註釋#> */ @property (nonatomic, strong) NSM

iOS報錯:linker command failed with exit code 1 (use -v to see invocation)尋找答案之旅

iOS報錯:linker command failed with exit code 1 (use -v to see invocation 錯誤出現 問題分析 最終解決方案 錯誤出現 Android開發程式設計師

iOS開發中:errcode = 40163; errmsg = code been used

// 使用者同意         let paramter = ["appid" : WEIXIN_APPID,                   &nbs

iOS開發中報錯duplicate symbols for architecture arm64 linker command failed with exit code 1

在對接微信三方登陸SDK時,在demo中沒有任何問題,然而提供給遊戲對接之後便出現了這個問題 duplicate symbols for architecture arm64   linker command failed with exit code 1 經驗告訴我

iOS自定義任意解析度的Camera(包含example code

說在前面 如果不想看文章,可以直接翻到最後,我已經把程式碼上傳到gist上,但這樣你會失去一個理解程式碼的機會。 概述 該文章會涉及到的概念包括: AVCaptureDeviceInput,AVCaptureVideoDataOutput,AVCaptureV