2014-06-24 1 views
1

J'utilise NSURLCache (AFNetworking) pour mettre en cache les réponses de mon backend, en réglant Cache-Control = max-age=3600, public. Cela fonctionne bien jusqu'à présent. Lorsque l'utilisateur ouvre l'application et que les données ne datent pas d'une heure, elles l'obtiennent du cache. Lorsqu'il est plus ancien, il le charge depuis le backend. J'ai également une option pull to refresh qui permet à l'utilisateur d'obtenir de nouvelles données du backend en remplaçant le cache même s'il a encore des données en cache valides, ce qui fonctionne également très bien.Comment forcer NSURLCache à mettre en cache la réponse même s'il a toujours un cache valide?

Le problème que j'ai, c'est que les données nouvellement récupérées (en remplaçant le cache) ne sont pas mises en cache. Scénario est comme ceci:

  1. L'utilisateur ouvre l'application et les données avec horodatage x est chargé à partir du back-end avec Cache-Control = max-age=3600, public
  2. études de l'utilisateur les données pendant 10 minutes.
  3. utilisateur fait maintenant une actualisation manuelle des données et de nouvelles données avec horodatage y est tiré du back-end avec Cache-Control = max-age=3600, public
  4. études utilisateur les nouvelles données pendant 10 minutes et ferme l'application.
  5. L'utilisateur ouvre l'application à nouveau, mais voit des données avec horodatage x au lieu de données avec horodatage y

Il me semble que NSURLCache n'a tout simplement pas les données du cache de la même ressource tant qu'il a mises en cache valide données, même si de nouvelles données provenant de la même ressource sont arrivées entre-temps. Est-ce que quelqu'un sait comment dire à NSURLCache de mettre en cache les données les plus récentes, même si elles ont encore des données valides? Ou est-ce juste de travailler comme prévu? Toute aide est grandement appréciée.

Répondre

0

Vous n'avez pas écrit quel code avez-vous utilisé pour l'actualisation manuelle. Je suppose que vous avez utilisé la politique NSURLRequestReloadIgnoringCacheData. Je n'ai pas testé si stocke la réponse mise à jour dans le cache. Toutefois, si elle ne le stocke pas, j'utiliserais removeCachedResponseForRequest: sur partagé NSURLCache, puis charger les données comme d'habitude.

Questions connexes