当AF连接恢复时,iOS AFNetworking会自动重试请求

时间:2014-10-16 13:11:53

标签: ios afnetworking afnetworking-2

适用于iOS的AFNetworking是否提供缓存失败请求的解决方案(例如,由于没有互联网连接),并在互联网连接恢复时自动重试请求。

谢谢, 多兰基尔托

3 个答案:

答案 0 :(得分:1)

请参阅AFNetworking网站的Network Reachability Manager部分。通过使用“可达性”,只要网络可用性发生变化,就会调用您的处理程序。只需设置setReachabilityStatusChangeBlock(AFNetworking 2)或AFHTTPRequestOperationManager(AFNetworking 3)的AFHTTPSessionManager

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL];

[manager.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
    switch (status) {
        case AFNetworkReachabilityStatusReachableViaWWAN:
        case AFNetworkReachabilityStatusReachableViaWiFi:
            // do whatever you want when network is available
            break;
        case AFNetworkReachabilityStatusNotReachable:
        default:
            // do whatever you want when network is not available
            break;
    }
}];

[manager.reachabilityManager startMonitoring];

答案 1 :(得分:1)

正如 matt AFNetworking issue #393中所说,AFNetworking没有重试机制:

  

这是少数人要求的,但每个用例对行为的要求都有惊人的不同要求,这使我相信对所有相关案例有用的一般解决方案难以处理

     

我认为请求重试是一个应用程序问题(或者甚至可能是用户启动的东西);它自己并不难实现:

- (void)downloadFileRetryingNumberOfTimes:(NSUInteger)ntimes 
                              success:(void (^)(id responseObject))success 
                              failure:(void (^)(NSError *error))failure
{
  if (ntimes <= 0) {
    if (failure) {
        NSError *error = ...;
        failure(error);
    }
  } else {
    [self getPath:@"/path/to/file" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        if (success) {
            success(...);
        }
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        [self downloadFileRetryingNumberOfTimes:ntimes - 1 success:success failure:failure];
    }];
  }
}

答案 2 :(得分:0)

不,但您可以在故障块中检测到请求是否超时。你可以在这种情况下重新发送它(就像这样的重试计数器)。