AFNetworking 設置超時時間及如何判斷超時
最近項目在優化,在連接超時之后要給用戶友好提示,這就要設置超時時間以及判斷超時之后的操作了。稍微折騰了一下,和大家分享一下。
設置超時時間
項目用的是AFNetworking,那就要研究AFNetworking超時設置,我二話不說就從Github上把AFNetworking的源碼下載下來,之前聽別人說過AFNetworking的默認超時時間為60s,不過聽說歸聽說,我還是去源碼看了一下。打開工程一搜,果然有,如下圖:
timeoutInterval.png
不過60s估計等到花都謝了,設置成5~10s比較合理,于是趕緊去設置超時時間:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 設置超時時間
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 8.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
模擬超時環境
怎么個模擬超時環境? 很簡單,把項目的地址改一下就行,例如:http://xxx.com/api
改為 http://xxx1.com/api
就行了,運行項目看一下超時設置,果然生效了。
ps:在MacBook和真機上模擬超時環境是可以的,不過在Mac mini上模擬不成功,提示為:
Error: Error Domain=NSURLErrorDomain Code=-1003 "未能找到使用指定主機名的服務器。"
不知道是什么原因?
判斷超時并做相關操作
設置完之后問題又來了,如果我想在超時之后做一些操作,怎么判斷什么時候請求超時?我想起來了每次AFN請求失敗我都有打印error,于是我就去看看打印信息,如下圖:
error.png
顯而易見,超時對應的 錯誤碼為-1001 好家伙,果然找到你了!根據error.code,在請求失敗出設置如下:
timeoutsetting.png
錯誤碼
蘋果提供相關錯誤碼如下:
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
}
想深入研究錯誤碼是什么的,蘋果文檔 有具體介紹。
設置完以上代碼后,就可以為用戶設置一些友好的提示了~,