AFNetworking设置超时时间和-[_NSInlineData objectForKey:]错误

一、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,这样就会出现这个错误了。

三、参考文章

  • [_NSInlineData objectForKey: unrecognized selector sent to instance 0x7e351cc0'

](https://stackoverflow.com/questions/30301006/nsinlinedata-objectforkey-unrecognized-selector-sent-to-instance-0x7e351cc)

Last modification:December 29th, 2017 at 10:45 am
如果看了这个文章可以让你少加会班,可以请我喝杯可乐
已打赏名单
微信公众号

One comment

  1. 东东

    测试 ::aru:insidious::

Leave a Comment