iOSiOS开发专区开发文档

AFNetworking 设置超时时间及如何判断超时

2016-08-09  本文已影响13287人  小球why

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
    }

想深入研究错误码是什么的,苹果文档 有具体介绍。

设置完以上代码后,就可以为用户设置一些友好的提示了~,

上一篇 下一篇

猜你喜欢

热点阅读