运行环境为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 c程序不知道为什么得不到结果
- ¥40 复杂的限制性的商函数处理
- ¥15 程序不包含适用于入口点的静态Main方法
- ¥15 素材场景中光线烘焙后灯光失效
- ¥15 请教一下各位,为什么我这个没有实现模拟点击
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置