青酆 2015-09-28 01:55 采纳率: 0%
浏览 3453

OC中AFNetworing设置超时时间,但实际运行超时时间与设置参数不符

运行环境为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分多钟才超时甚至一直不超时就在那上传图片.
各位哥哥姐姐,婶婶叔叔求爱护 > <

  • 写回答

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++配置