J'utilise ce code pour extraire un simple flux JSON d'un serveur:
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);
}];
Ça marche. Cependant, après avoir modifié le fichier JSON dans kDataUrl et vérifié que la modification a été effectuée dans un navigateur, la réponse précédente est toujours obtenue lorsque je lance à nouveau l'application.
Il semble qu'AFNetworking cache en quelque sorte l'ancienne réponse. Je ne veux pas ce comportement. Je veux télécharger le flux actuel. Y a-t-il une sorte de paramètre ou paramètre que je dois définir pour désactiver la mise en cache?
Bref, définissez simplement votre gestionnaire AFNetworking:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
Prendre plaisir!
Il suffit de faire:
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicyReturnCacheDataElseLoad
essayez d'ajouter des déchets à la fin de votre URL (par exemple, horodatage)
kDataUrl = [NSString stringWithFormat:@"%@?%f", kDataUrl, [NSDate timeIntervalSinceReferenceDate]];
Dans ce cas, vous demanderiez de nouvelles données à chaque fois. Ça marche pour moi))
Pour les gens rapides
let manager = AFHTTPSessionManager()
manager.requestSerializer.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData
Je ne me sens pas bien, mais voici ce qui fonctionne. Dans 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];
L'ajout de l'en-tête Cache-Control:no-store
à la demande, en supposant que votre serveur soit correctement implémenté, renverra une réponse avec le même en-tête, désactivant ainsi le cache disque NSURLCache
pour toute demande contenant cet en-tête.
Avec AFNetworking 3:
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfiguration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseURL
sessionConfiguration:sessionConfiguration];