2016-12-05 1 views

Répondre

2

Deux options faciles viennent à l'esprit:

  • Appel [[NSURLCache sharedURLCache] cachedResponseForRequest:request] avant de faire la demande, stocker la réponse en cache, puis le faire à nouveau après avoir terminé la réception de données, et de comparer les deux réponses mises en cache pour voir si elles sont identiques.
  • Effectuez une demande initiale avec la stratégie de cache NSURLRequestReturnCacheDataDontLoad et, en cas d'échec, effectuez une deuxième requête avec une stratégie plus saine.

La première approche est habituellement préférable, car la seconde approche retournera des données qui existent dans le cache même si elles sont périmées. Cependant, dans certains cas rares (par exemple un mode hors ligne), cela pourrait être ce que vous voulez, c'est pourquoi je l'ai mentionné.

+0

comment je peux comparer deux cachedResponse? –

0

Utilisez request.cachePolicy = NSURLRequestReloadIgnoringCacheData à la place. NSURLRequestUseProtocolCachePolicy est la politique par défaut. Fondamentalement, cela signifie que le comportement de mise en cache est défini dans NSURLProtocol stratégie d'implémentation ou de cache de NSURLSessionConfiguration.

+0

mais j'ai besoin de déterminer si la réponse provient du cache ou non –

+0

De cette façon, vous pouvez garantir que cette réponse ne provient pas du cache. Il ya peu d'autres façons: – dosi

+0

mais je voudrais aussi la réponse en cache ... juste besoin de savoir si les données sont en cache ou non –

0

Si vous avez besoin d'informations uniquement par curiosité, vous pouvez afficher l'utilisation de votre réseau par les métèques du réseau d'exécution Xcode. Changez la politique à un paramètre différent et observez la différence.