对磁盘的 afnetworking 缓存请求

Posted

技术标签:

【中文标题】对磁盘的 afnetworking 缓存请求【英文标题】:afnetworking cache request to disc 【发布时间】:2014-05-01 18:55:20 【问题描述】:

我目前正在使用下面的代码从网络服务(通过 https)加载数据。

我需要一种方法将此数据缓存到磁盘。

理想情况下,流程应该是这样的。

数据加载了吗?

如果不是 - 从缓存中读取 如果没有互联网连接 - 从缓存中读取 如果是 - 照常继续

这怎么可能?

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:@"someurl" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) 
    NSLog(@"JSON: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    //NSLog(@"Error: %@", error);
];

【问题讨论】:

【参考方案1】:

要将数据写入文件,您可以NSJSONSerialization 将您的响应对象转换为NSData,然后将数据保存到文件中:

NSString* filePath [NSTemporaryDirectory() stringByAppendingPathComponent:@"someFile.json"];
NSData* data = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:nil];
[data writeToFile:filePath options:0 error:nil];

然后,在您发出请求之前,检查文件是否存在并从中读取而不是执行您的请求:

NSData* jsonData = [NSData dataWithContentsOfFile:filePath];
if(jsonData == nil)
    // Perform network request
else
    id responseObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];

【讨论】:

以上是关于对磁盘的 afnetworking 缓存请求的主要内容,如果未能解决你的问题,请参考以下文章

IOS AFN (第三方请求)

AFNetWorking 网络请求转载

AFN3.0封装

AFNetWorking3.0 处理请求头 和 请求内容

AFN请求问题

iOS AFNetworking 3.0以上使用