适用于iOS的AFNetworking是否提供缓存失败请求的解决方案(例如,由于没有互联网连接),并在互联网连接恢复时自动重试请求。
谢谢, 多兰基尔托
答案 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)
不,但您可以在故障块中检测到请求是否超时。你可以在这种情况下重新发送它(就像这样的重试计数器)。