web-dev-qa-db-fra.com

AFNetworking - ne cache pas la réponse

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?

17
soleil

Bref, définissez simplement votre gestionnaire AFNetworking:

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

Prendre plaisir!

57
gran33

Il suffit de faire:

manager.requestSerializer.cachePolicy = NSURLRequestCachePolicyReturnCacheDataElseLoad
1
Pranshu

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))

1
dollar2048

Pour les gens rapides

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

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];
0
soleil
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.

0
Yuri Brigance

Avec AFNetworking 3:

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

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