AFNetworking 设置超时时间及如何判断超时
2016-08-09 本文已影响13287人
小球why
AFNetworking 设置超时时间及如何判断超时
最近项目在优化,在连接超时之后要给用户友好提示,这就要设置超时时间以及判断超时之后的操作了。稍微折腾了一下,和大家分享一下。
设置超时时间
项目用的是AFNetworking,那就要研究AFNetworking超时设置,我二话不说就从Github上把AFNetworking的源码下载下来,之前听别人说过AFNetworking的默认超时时间为60s,不过听说归听说,我还是去源码看了一下。打开工程一搜,果然有,如下图:

不过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,于是我就去看看打印信息,如下图:

显而易见,超时对应的 错误码为-1001 好家伙,果然找到你了!根据error.code,在请求失败出设置如下:

错误码
苹果提供相关错误码如下:
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
}
想深入研究错误码是什么的,苹果文档 有具体介绍。
设置完以上代码后,就可以为用户设置一些友好的提示了~,