私はこのコードを使用して、サーバーから単純な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はどういうわけか古い応答をキャッシュしているようです。私はこの振る舞いを望まない。現在のフィードをダウンロードしたい。キャッシュをオフにするために設定する必要のある設定やパラメータはありますか?
長い話を短くして、AFNetworkingマネージャーを定義するだけです。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
楽しい!
ただしてください:
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicyReturnCacheDataElseLoad
uRLの最後にごみを追加してみてください(タイムスタンプなど)
kDataUrl = [NSString stringWithFormat:@"%@?%f", kDataUrl, [NSDate timeIntervalSinceReferenceDate]];
この場合、毎回新しいデータを要求します。それは私のために働きます))
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];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setValue:@"no-store" forHTTPHeaderField:@"Cache-Control"];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
サーバーが正しく実装されていると仮定して、リクエストにCache-Control:no-store
ヘッダーを追加すると、同じヘッダーの応答が返されるため、このヘッダーを含むリクエストのNSURLCache
ディスクキャッシュが無効になります。
AFNetworking 3の場合:
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL
sessionConfiguration:sessionConfiguration];