一、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) - iOS开发---AFN设置超时(timeoutInterval)不起作用
- timeoutintervalforrequest
版权属于:东哥笔记 - DongGe.org
本文链接:https://dongge.org/blog/723.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!
1 条评论
测试