2013-11-02 2 views
6

私のプロジェクトでは、AFNetworkingを使ってWebからデータをダウンロードしています。私はNSURLRequestNSURLRequestUseProtocolCachePolicyを利用して、キャッシュされたデータを(キャッシュが有効な場合)提供しています。これは私のコードです: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 だから基本的に私は、キャッシュされたデータを提供しますが、私のキャッシュされたデータがまだサーバー上で有効であるかがあるかどう新しいデータをダウンロードするかどうかを確認したいと思います

ウェブから新しいデータを取得します。これを達成する方法はありますか?私はAFHTTPRequestOperationsetCacheResponseBlockを試しましたが、キャッシュされたデータのタイムスタンプを取得できません。これを行うための「スマートな」方法はありますか?

+0

私はAFNetworking 2.0を使用しています – paxx

+0

このトピックをチェックすると、役立つかもしれません:http://stackoverflow.com/a/21556002/514181 – Darrarski

答えて

関連する問題