私のプロジェクトでは、AFNetworkingを使ってWebからデータをダウンロードしています。私は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が
+ (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;
}
は今、私は新しいロジックに移行したいメソッドを取得します:
-
- 有効なキャッシュされたデータがキャッシュされたデータ
- をユーザにサーブした場合場合 - 変更 - 以来で取得、キャッシュされたデータのタイムスタンプ
- サーバーrespondes 304が変更されないように設定ヘッダー新しい要求をディスパッチキャッシュされたデータ
- を取得新しいデータ
- 更新UIは、キャッシュデータの元場合は、新しいデータ
- とがある場合、キャッシュはまだOK、または200 OKであれば
- pired だから基本的に私は、キャッシュされたデータを提供しますが、私のキャッシュされたデータがまだサーバー上で有効であるかがあるかどう新しいデータをダウンロードするかどうかを確認したいと思います
ウェブから新しいデータを取得します。これを達成する方法はありますか?私はAFHTTPRequestOperation
にsetCacheResponseBlock
を試しましたが、キャッシュされたデータのタイムスタンプを取得できません。これを行うための「スマートな」方法はありますか?
私はAFNetworking 2.0を使用しています – paxx
このトピックをチェックすると、役立つかもしれません:http://stackoverflow.com/a/21556002/514181 – Darrarski