web-dev-qa-db-fra.com

Mise en cache des pages Web UIWebView pour une visualisation hors ligne

Tout d'abord, je suis presque sûr d'avoir vérifié toutes les réponses ici et rien ne fait ce que j'aimerais faire.

  1. Dans cette question, pour réponse est donnée ASIHTTPRequest qui est un projet mort. ( Comment télécharger une page Web entière (avec des images) sur l'iPhone? )
  2. Dans cette question, l'utilisateur a proposé RNCachingURLProtocol, ce qui est vraiment génial, mais j'ai eu quelques problèmes après avoir fermé complètement l'application (la fermer dans la barre des tâches). Après cela, je n'ai pas reçu de CSS ou d'images, seul le HTML a été chargé. ( Mettre en cache une seule page Web pour une utilisation hors ligne dans Xcode/UIWEBVIEW ).

Il y a peu de réponses supplémentaires mais aucune n'est bonne. Il doit y avoir une implémentation simple pour ce que je recherche.

Je voudrais: Lorsque l'application s'ouvre, elle charge une page Web. Je veux enregistrer complètement cette page Web. L'utilisateur peut maintenant quitter ou faire ce qu'il veut (mais pas désinstaller). Tant qu'il y a une connexion Internet (je vérifie que l'utilisation de la classe d'accessibilité), la page Web se charge normalement et elle est enregistrée. SI L'UTILISATEUR ouvre l'application et qu'il n'y a PAS de connexion INTERNET, je veux juste montrer un message "il se peut qu'il ne soit pas à jour bla bla boa" et afficher une page Web enregistrée et complète qui a été enregistrée la dernière fois que l'application a une connexion Internet.

Quelle serait la meilleure façon (à jour) de sauvegarder une page Web complète. J'ai trouvé quelque chose sur MKNetworkKit mais je ne sais pas comment l'utiliser. Toute aide serait appréciée.

19
jovanjovanovic

Il semble que la mise en cache standard ne soit pas assez bonne car vous n'avez aucun contrôle sur ce qui sera mis en cache et pendant combien de temps. La façon la plus simple de résoudre ce problème est de créer votre propre méganisme de mise en cache en remplaçant NSURLCache. Vous pouvez trouver de la documentation à ce sujet sur http://nshipster.com/nsurlcache/ et un exemple sur http://github.com/evermeer/EVURLCache Cet échantillon même vous permet d'utiliser un cache pré-rempli qui peut être inclus dans l'installation de votre application.

7
Edwin Vermeer
NSString *stringurl=[NSString stringWithFormat:@"http://www.google.com"];
NSURL *url=[NSURL URLWithString:stringurl];
NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:15.0];
[uiwebview loadRequest:theRequest];

Le système de chargement d'URL fournit un cache composite sur disque et en mémoire des réponses aux demandes. Ce cache permet à une application de réduire sa dépendance à une connexion réseau et d'augmenter ses performances.

6
Rahul K Rajan