Il semble que uiwebview code> n'appelle pas toujours
STORECACHEDRESPONSEPONSE: FORREQUEST: CODE> Chaque fois que c'est charger une ressource. Quelqu'un sait-il pourquoi? J'essaie de cacher des images en utilisant
- [Nsurlcache Storecachedresponse: Forequest:] Code>, il fasse la majeure partie du travail bien, mais dans certains cas
uiwebview code> n'appelle pas cette méthode sur la charge de la page où il y a des images sur elle. P>
5 Réponses :
comme décrit ici NsurlConnection Code> N'appelle pas
STORECACHEDRESPONSEPONSE: FORREQUEST: CODE> Si la taille du fichier sur 50kb (52428 octets).
Essayez ASIHTTPEQUEST Caching . P>
Je vois cela pour les petits fichiers (100 d'octets) également. Le webview ne parvient pas également à appeler CacheDresponseForrequest: code>
Avez-vous vérifié l'état HTTP et les en-têtes de cache? Expire, contrôle-cache, etc.? Peut-être qu'un serveur répond avec Statut = 304 sans organisme de réponse?
- (void)connection:(NSURLConnection *)conn didReceiveResponse:(NSURLResponse *)aResponse { NSLog(@"CODE: %d", ((NSHTTPURLResponse *)aResponse).statusCode); NSLog(@"HEADERS: %@", ((NSHTTPURLResponse *)aResponse).allHeaderFields); }
Réponse à la requête du fournisseur de primes: p>
Je vois cela pour de petits fichiers (100s d'octets) ainsi. WebView échoue également à l'appel
cachedResponseForRequest: code> p> blockQuote>
J'ai trouvé cette question a > que ce comportement adresses directement: p>
En dépit de la documentation d'Apple indiquant autrement ,
NSURLCache code> sur iOS ne fait pas de disque (flash) la mise en cache du tout. Vous peut sous-classe
NSURLCache code> pour modifier le comportement des fonctions de recherche et stocker les opérations d'utiliser le disque (comme
SDURLCache code>
fait), mais en raison du suite à des limitations sévères de la façon dont le cache est utilisé et mis en œuvre, cela ne fonctionne pas aussi bien que vous attendez: strong> p>
NSURLConnection code> ne remet même pas
storeCachedResponse: forRequest: code> pour les fichiers sur environ 50 Ko (> = 52428 octets, pour être exact). Cela rend le sous-classement
NSURLCache code> inutile pour notre utilisation (200KB images), car il ne sera pas même pas dans le cache. Comme un Par conséquent, il faut ajouter la mise en cache manuellement à un niveau supérieur
NSURLConnection code>. P> li>
Même si l'on appelle intégré du NSURLCache
storeCachedResponse: forRequest: code> manuellement, il stocke seulement réponse en mémoire si elle est inférieure à 180Ko. Je l'ai testé par ce appelant storeCachedResponse manuellement et voyant que le avant / après
currentMemoryUsage code> n'a pas changé pour les longueurs de données ci-dessus au sujet de 180KB. Nous devons donc écrire notre propre cache mémoire LRU aussi. Strong> p> li> ul> blockQuote>
(Non souligné.) P>
Cela semble être responsable du comportement étant appelé. Comme les points de réponse acceptée en cours sur , ASIHTTPRequest est la solution de contournement prévue pour ce comportement. p>
Cependant, em> noter que la mise en garde au haut de la page: p>
S'il vous plaît noter que je ne travaille plus sur cette bibliothèque - vous pouvez envisager d'utiliser quelque chose d'autre pour les nouveaux projets. :) P> blockQuote>
Vous devriez envisager compter sur les bibliothèques prises en charge ou, si vous préférez, contribuant revenir à cette bibliothèque une fois qu'il est à la base de votre code. P>
Appréciez-le :) (et un excellent exemple d'où j'aurais dû rechercher plus fort) - Merci d'avoir pris le temps de creuser de manière approfondie!
@Nevir aucun problème! Je suis heureux que ce soit utile. :)
Est-ce que quelqu'un sait si cela reste le cas avec NsurlSession sur iOS 7/8? Je rencontre des problèmes d'obtenir Nsurlcache pour enregistrer de gros fichiers image (~ 7 Mo).
Je ne suis pas sûr de savoir comment cela fonctionne pour un uiwebvieuue, mais lorsque vous utilisez un NSurLrequest, la taille maximale du fichier dépend de la manière dont vous initialisez l'urlcache (initwithMemoryCapacité: (Nsuinteger) MichelyCapacité ...) Je viens de mettre en cache un fichier de 2 Mo p>
Pour moi, un fichier de 515kb .CSS demandé à partir de uiWebView peut être traité avec CacheResponseForrequest: code> d'un
NsurlCache code> Sous-classe initialisé avec
Michelcapacité: 0 DiskCapacité: 1024 * 1024 * 256 code>
Si vous initialisez NsurlCache avec DiskPath nil, le cache de disque sur disque ne sera pas actif et alors configure votre urlcache comme ceci p> nsurlcache code> fonctionne avec deux caches différents: cache sur disque et cache en mémoire
STORECACHEDResponse: ForQuest: code> ne sera appelé que pour les tailles de réponse inférieures à 50kb. p>
Je remarque cela aussi; Bien que sur i> appareil pour mon application. Lorsque la vue Web charge une demande du Nsurlcache, il semble sauter sur ce même cache pour des actifs sur cette page.