6
在我的項目中,我正在使用AFNetworking從網上下載數據。我在我的NSURLRequest
上利用NSURLRequestUseProtocolCachePolicy
來爲用戶緩存的數據提供服務(如果緩存有效)。這是我的代碼:AFNetworking和響應緩存處理
請求方法:
// create NSURL request
NSURLRequest *request = [ServerFactory URLGETRequestWithURL:url];
//creating AFHTTPRequestOperation
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
//set serializaer
operation.responseSerializer = [AFJSONResponseSerializer serializer];
//need to specify that text is acceptable content type, otherwise the error occurs
operation.responseSerializer.acceptableContentTypes = [MyRepository acceptableContentTypes];
//running fetch request async
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
//parse data
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
//error handling
}];
//start async operation
[operation start];
可接受的內容類型的方法
+ (NSSet *)acceptableContentTypes
{
return [NSSet setWithObjects:@"application/json", @"text/plain", @"text/html" ,nil];
}
ServerFactory get方法
+ (NSURLRequest *)URLGETRequestWithURL:(NSString *)URL
{
NSMutableURLRequest *request = [[ServerFactory URLRequestWithURL:URL] mutableCopy];
[request setCachePolicy:NSURLRequestUseProtocolCachePolicy];
[request setHTTPMethod:@"GET"];
return request;
}
+ (NSURLRequest *)URLRequestWithURL:(NSString *)URL
{
// creating NSURL to give to NSURLRequest
NSURL *theURL = [NSURL URLWithString:URL];
//adding service version in http header
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:theURL];
[request addValue:HTTP_HEADER_VERSION_VALUE forHTTPHeaderField:HTTP_HEADER_VERSION_NAME];
//returing request
return request;
}
現在我想過渡到新的邏輯:
- 獲取緩存的數據
- 如果高速緩存的數據有效
- 即成用戶與高速緩存的數據
- 調度用的If-Modified-Since標題設置爲檢索緩存的數據時間戳
- 服務器respondes 304未修改新請求如果高速緩存還行,或200行,如果有新的數據
- 更新UI與新的數據
- 如果緩存中的數據前pired
- 從網絡
獲取新信息的數據所以基本上我想成爲高速緩存的數據,但檢查我的緩存數據仍然在服務器上有效或是否有新的數據下載。有沒有辦法做到這一點?我嘗試setCacheResponseBlock
AFHTTPRequestOperation
但我無法獲得緩存的數據時間戳。有沒有一種「更聰明」的方式來做到這一點?
我正在使用AFNetworking 2.0 – paxx
看看這個主題,它可能會幫助你:http://stackoverflow.com/a/21556002/514181 – Darrarski