一、AFNetworking设置超时时间

本来以为这样就可以设置超时时间

1.1、错误的设置超时时间

NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
[configuration setTimeoutIntervalForRequest:10.0];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
// 创建请求
NSMutableURLRequest *req = [manager.requestSerializer requestWithMethod:@"POST" URLString:_requestUrl parameters:self.dataDic error:&errors];

结果在使用的时候发现并没有起到效果,打印一下URLRRequest的超时时间,发现居然是60

NSLog(@"%f",req.timeoutInterval);

找了一大堆,在Stack Overflow中找到一个回答

As my investigation on iOS 7.0.3, timeoutInterval for NSURLRequest does not get any effects when it is used with NSURLSession.
Whether you set timeoutIntervalForRequest for NSURLSessionConfiguration or not, timeoutInterval is just ignored.

就是设置NSURLSession的超时时间是无效的。

这里找到了解决方案,就是不使用AFURLSessionManager,而是用它的子类AFHTTPSessionManager去设置和创建请求,这样的话上面的就可以这么写了。

1.2、正确的设置超时时间

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 10.0f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
// 创建请求
NSMutableURLRequest *req = [manager.requestSerializer requestWithMethod:@"POST" URLString:_requestUrl parameters:self.dataDic error:&errors];

这样在打印req的超时时间就可以了。

二、[_NSInlineData objectForKey:]错误

这个错误很大原因是因为在创建manager的时候,设置了

manager.responseSerializer=[AFHTTPResponseSerializer serializer];

因为AFNetworking默认会将json数据解析,那样的话返回回调里面的responseObject就是一个解析过的数据,比如字典,但是如果使用了上面这个函数,那么返回的responseObject就是一个NSData,这样就会出现这个错误了。

三、参考文章


☟☟可点击下方广告支持一下☟☟

最后修改:2017 年 12 月 29 日
请我喝杯可乐,请随意打赏: ☞已打赏列表