AFNetworking 2.0并仅在离线时使用缓存

时间:2014-04-19 18:28:50

标签: ios caching offline afnetworking-2

当用户使用我的应用程序并且他们丢失连接或使用飞行模式时,我遇到了问题。

我的应用服务器端没有设置任何缓存策略,暂时我无法更改它。我从AFNetworking 1.x迁移到2.0,现在我在发出请求时使用AFHTTPRequestOperationManager。问题是,因为我在服务器端没有缓存策略,所以每个请求都发送到服务器(现在可以正常),但如果用户无法连接到我的服务器,它就不会加载缓存的请求

所以,我正在尝试以下方法,直接使用AFHTTPRequestOperation

NSURL *URL = [NSURL URLWithString:filePath];
NSMutableURLRequest *request = [[NSURLRequest requestWithURL:URL] mutableCopy];
if (![[AFNetworkReachabilityManager sharedManager] isReachable]) {
    [request setCachePolicy:NSURLRequestReturnCacheDataElseLoad];
}
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

}];
[[NSOperationQueue mainQueue] addOperation:op];

这样,如果AFNetworkReachabilityManager告诉我没有连接,我为请求配置了缓存策略,并从缓存中正确加载。

问题是,这是解决这种情况的正确方法吗?

1 个答案:

答案 0 :(得分:2)

您只需要对AFHTTPSessionManager进行子类化并检查客户端是否处于脱机状态。然后,您可以更改缓存策略或强制应用程序使用缓存数据。

以下是一个非常广泛的教程:http://www.hpique.com/2014/03/how-to-cache-server-responses-in-ios-apps/