AFNetworking 設(shè)置超時時間及如何判斷超時

AFNetworking 設(shè)置超時時間及如何判斷超時

最近項目在優(yōu)化,在連接超時之后要給用戶友好提示,這就要設(shè)置超時時間以及判斷超時之后的操作了。稍微折騰了一下,和大家分享一下。

設(shè)置超時時間

項目用的是AFNetworking,那就要研究AFNetworking超時設(shè)置,我二話不說就從Github上把AFNetworking的源碼下載下來,之前聽別人說過AFNetworking的默認超時時間為60s,不過聽說歸聽說,我還是去源碼看了一下。打開工程一搜,果然有,如下圖:


timeoutInterval.png

不過60s估計等到花都謝了,設(shè)置成5~10s比較合理,于是趕緊去設(shè)置超時時間:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 設(shè)置超時時間
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 8.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];

模擬超時環(huán)境

怎么個模擬超時環(huán)境? 很簡單,把項目的地址改一下就行,例如:http://xxx.com/api改為 http://xxx1.com/api就行了,運行項目看一下超時設(shè)置,果然生效了。

ps:在MacBook和真機上模擬超時環(huán)境是可以的,不過在Mac mini上模擬不成功,提示為:

Error: Error Domain=NSURLErrorDomain Code=-1003 "未能找到使用指定主機名的服務(wù)器。" 

不知道是什么原因?

判斷超時并做相關(guān)操作

設(shè)置完之后問題又來了,如果我想在超時之后做一些操作,怎么判斷什么時候請求超時?我想起來了每次AFN請求失敗我都有打印error,于是我就去看看打印信息,如下圖:


error.png

顯而易見,超時對應(yīng)的 錯誤碼為-1001 好家伙,果然找到你了!根據(jù)error.code,在請求失敗出設(shè)置如下:


timeoutsetting.png

錯誤碼

蘋果提供相關(guān)錯誤碼如下:

    enum
    {
       NSURLErrorUnknown = -1,
       NSURLErrorCancelled = -999,
       NSURLErrorBadURL = -1000,
       NSURLErrorTimedOut = -1001,
       NSURLErrorUnsupportedURL = -1002,
       NSURLErrorCannotFindHost = -1003,
       NSURLErrorCannotConnectToHost = -1004,
       NSURLErrorDataLengthExceedsMaximum = -1103,
       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,
       NSURLErrorInternationalRoamingOff = -1018,
       NSURLErrorCallIsActive = -1019,
       NSURLErrorDataNotAllowed = -1020,
       NSURLErrorRequestBodyStreamExhausted = -1021,
       NSURLErrorFileDoesNotExist = -1100,
       NSURLErrorFileIsDirectory = -1101,
       NSURLErrorNoPermissionsToReadFile = -1102,
       NSURLErrorSecureConnectionFailed = -1200,
       NSURLErrorServerCertificateHasBadDate = -1201,
       NSURLErrorServerCertificateUntrusted = -1202,
       NSURLErrorServerCertificateHasUnknownRoot = -1203,
       NSURLErrorServerCertificateNotYetValid = -1204,
       NSURLErrorClientCertificateRejected = -1205,
       NSURLErrorClientCertificateRequired = -1206,
       NSURLErrorCannotLoadFromNetwork = -2000,
       NSURLErrorCannotCreateFile = -3000,
       NSURLErrorCannotOpenFile = -3001,
       NSURLErrorCannotCloseFile = -3002,
       NSURLErrorCannotWriteToFile = -3003,
       NSURLErrorCannotRemoveFile = -3004,
       NSURLErrorCannotMoveFile = -3005,
       NSURLErrorDownloadDecodingFailedMidStream = -3006,
       NSURLErrorDownloadDecodingFailedToComplete = -3007
    }

想深入研究錯誤碼是什么的,蘋果文檔 有具體介紹。

設(shè)置完以上代碼后,就可以為用戶設(shè)置一些友好的提示了~,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容