AFNetworking - ne pas mettre en cache la réponse
Je suis en utilisant ce code pour la traction d'une simple flux JSON à partir 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);
}];
Il fonctionne. Cependant, après avoir modifié le fichier JSON à kDataUrl, et vérifier que la modification est faite dans un navigateur, quand je lance l'application, j'obtiens toujours la réponse précédente.
Il semble que AFNetworking est en quelque sorte la mise en cache le vieux la réponse. Je ne veux pas de ce comportement. Je veux télécharger le courant d'alimentation. Est-il une sorte de cadre ou d'un paramètre que je dois mettre pour désactiver la mise en cache?
- avez-vous résoudre ce problème? Je ne peux pas trouver quelque chose pour définir la stratégie de cache dans AFHTTPRequestOperationManager
- Je couvre la mise en cache dans AFNetworking dans ce blog - AFImageCache & NSURLCache. Peut-être que vous trouverez l'utilisation de la grippe : blog.originate.com/blog/2014/02/20/afimagecache-vs-nsurlcache
- essayez comme ceci: stackoverflow.com/questions/33767908/...
Vous devez vous connecter pour publier un commentaire.
Faire une longue histoire courte, il suffit de définir votre AFNetworking manager:
Profitez-en!
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; configuration.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
Ce que vous vivez est l'effet de l'URL de cache (voir NSURLCache).
Le comportement de mise en cache de la demande peut être définie par la définition d'un "Cache" pour le
NSMutableURLRequest
objet, par exemple:Le comportement par défaut du cache (
NSURLRequestUseProtocolCachePolicy
) est approprié pour le protocole actuel, qui est HTTP. Et pour le protocole HTTP, une demande sera mis en cache par défaut!Et, AFNetworking ne change pas le comportement par défaut de la demande!
Maintenant, vous pouvez définir une autre politique de cache, par exemple:
NSURLRequestReloadIgnoringLocalCacheData
C'est probablement le comportement désiré que vous voulez atteindre:
Le problème, ici, c'est que le super "pratique" de l'API ne fournit pas un moyen pour configurer l'URL comportement de mise en cache à la demande. Vous ne pouvez pas accéder à l'utilisées demande.
Donc, je vous suggère d'utiliser un niveau inférieur de l'API où vous avez le contrôle sur la création
NSMutableURLRequest
objet, et de définir la stratégie de cache en conséquence.Viens de faire:
Pour Swift-voyants
essayez d'ajouter quelques détritus à la fin de votre URL (par exemple, timestamp)
Dans ce cas, vous demande de nouvelles données à chaque fois.
Qui fonctionne pour moi))
Je ne me sens pas bien à ce sujet, mais voici ce qui fonctionne. Dans l'AppDelegate didFinishLaunchingWithOptions:
Avec AFNetworking 3:
L'ajout de la
Cache-Control:no-store
en-tête de la demande, en supposant que votre serveur est correctement mis en œuvre, sera de retour une réponse avec le même en-tête ainsi la désactivationNSURLCache
cache disque pour toute demande qui contient cet en-tête.