web-dev-qa-db-ja.com

AFNetworking-応答をキャッシュしません

私はこのコードを使用して、サーバーから単純なJSONフィードをプルしています。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];

[manager GET:kDataUrl parameters:nil
 success:^(AFHTTPRequestOperation *operation, id responseObject) {
     NSLog(@"response: %@", responseObject);
 }
 failure:^(AFHTTPRequestOperation *operation, NSError *error) {
     NSLog(@"JSON DataError: %@", error);
 }];

できます。ただし、kDataUrlでJSONファイルを変更し、ブラウザーで変更が行われたことを確認した後、アプリを再度実行すると、以前の応答が返されます。

AFNetworkingはどういうわけか古い応答をキャッシュしているようです。私はこの振る舞いを望まない。現在のフィードをダウンロードしたい。キャッシュをオフにするために設定する必要のある設定やパラメータはありますか?

17
soleil

長い話を短くして、AFNetworkingマネージャーを定義するだけです。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

楽しい!

58
gran33

ただしてください:

manager.requestSerializer.cachePolicy = NSURLRequestCachePolicyReturnCacheDataElseLoad
1
Pranshu

uRLの最後にごみを追加してみてください(タイムスタンプなど)

kDataUrl = [NSString stringWithFormat:@"%@?%f", kDataUrl, [NSDate timeIntervalSinceReferenceDate]];

この場合、毎回新しいデータを要求します。それは私のために働きます))

1
dollar2048

Swift poeple

let manager = AFHTTPSessionManager()
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

私はそれについて気分が悪いですが、これがうまくいくものです。 AppDelegateのdidFinishLaunchingWithOptions:

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                            diskCapacity:0
                                                                diskPath:nil];
    [NSURLCache setSharedURLCache:sharedCache];
0
soleil
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:@"no-store" forHTTPHeaderField:@"Cache-Control"];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

サーバーが正しく実装されていると仮定して、リクエストにCache-Control:no-storeヘッダーを追加すると、同じヘッダーの応答が返されるため、このヘッダーを含むリクエストのNSURLCacheディスクキャッシュが無効になります。

0
Yuri Brigance

AFNetworking 3の場合:

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL
                                                         sessionConfiguration:sessionConfiguration];
0
Dirty Henry