运行环境为Xcode7.0,iOS9.0,AFNetworking~> 2.5.0,为了用户在网速慢情况下上次照片等待45秒后提示用户上次超时.
与超时时间设置有关的代码为:
// 设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 45.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
实际运行时,如果我设置超时为5s,实际会在13秒左右报超时错误,设置45s,1分多钟也不见超时.而且AFNetworking默认超时为60s,但在不更改其超时时间的情况下,也是1分多钟才超时甚至一直不超时就在那上传图片.
各位哥哥姐姐,婶婶叔叔求爱护 > <
OC中AFNetworing设置超时时间,但实际运行超时时间与设置参数不符
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 青酆 2015-09-28 01:57关注
附上整个网络请求的代码:
我们对AFNetworking进行了二次封装
/**- 用户上传修改自己的Banner
- @param userID 用户ID
- @param banner banner
- @param success 成功block
-
@param failed 失败block
*/- (void)userPostBannerWithUserID:(NSString *)userID withBanner:(NSData *)data success:(Success)success failed:(Failure)failure { NSString *url = [NSString stringWithFormat:@"%@%@",kBaseURL,@"/account/user/banner"]; NSDictionary *parms = @{@"banner":data,@"user_id":userID}; [CRHttpTool httpToolRequestWithBaseURL:url params:parms success:^(id json) { success(json); } failure:^(NSError *error) { failure(error); MyLog(@"%@",error.description);
} method:@"POST"];
}
#pragma mark --- 私有方法
/**- 像服务器发送请求,不带请求头
- @param urlString 请求完整url路径
- @param params 请求参数
- @param success 成功block
- @param failed 失败block
-
@param method 请求方法(POST,GET)
*/- (void)httpToolRequestWithBaseURL:(NSString *)urlString params:(NSDictionary *)params success:(Success)success failure:(Failure)failure method:(NSString *)method { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; AFHTTPRequestOperation * operation =nil;
// 设置超时时间
[manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.timeoutInterval = 45.f;
[manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
manager.requestSerializer.cachePolicy = NSURLRequestReturnCacheDataElseLoad;//GET请求
NSComparisonResult comparison1 = [method caseInsensitiveCompare:@"GET"];
if (comparison1 == NSOrderedSame) {
operation =[manager GET:urlString
parameters:params
success:^(AFHTTPRequestOperation *operation,id responseObject) {
success(responseObject);
}failure:^(AFHTTPRequestOperation *operation,NSError *error) {
failure(error);
}];
}
//POST请求
NSComparisonResult comparison2 = [method caseInsensitiveCompare:@"POST"];
if (comparison2 == NSOrderedSame) {BOOL isFile = NO; for (NSString *key in params.allKeys) { id value = params[key]; if ([value isKindOfClass:[NSData class]]) { isFile = YES; break; } } //不包含文件数据 if(!isFile){ operation = [manager POST:urlString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { success(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { failure(error); }]; }else{ operation = [manager POST:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { for (NSString *key in params) { id value = params[key]; if ([value isKindOfClass:[NSData class]]) { NSString *keySuffix = [NSString stringWithFormat:@"%@.jpg",key]; [formData appendPartWithFileData:value name:key fileName:keySuffix mimeType:@"image/jpeg"]; } } } success:^(AFHTTPRequestOperation *operation, id responseObject) { success(responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { failure(error); }]; }
}
operation.responseSerializer = ({
AFJSONResponseSerializer *ret = [AFJSONResponseSerializer serializer];
ret.removesKeysWithNullValues = YES;
ret;
});
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 解决一个加好友限制问题 或者有好的方案
- ¥15 关于#java#的问题,请各位专家解答!
- ¥15 急matlab编程仿真二阶震荡系统
- ¥20 TEC-9的数据通路实验
- ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
- ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
- ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
- ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
- ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
- ¥30 求解达问题(有红包)