J'essaie de télécharger une page Web (html), puis d'afficher le code html local téléchargé dans un UIWebView.
C'est ce que j'ai essayé -
NSString *stringURL = @"url to file";
NSURL *url = [NSURL URLWithString:stringURL];
NSData *urlData = [NSData dataWithContentsOfURL:url];
if ( urlData )
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"index.html"];
[urlData writeToFile:filePath atomically:YES];
}
//Load the request in the UIWebView.
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]]; // Do any additional setup after loading the view from its nib.
Mais cela donne une erreur 'SIGABRT'.
Pas trop sûr de ce que j'ai mal fait?
Toute aide serait appréciée. Merci!
Le chemin transmis à UIWebView est incorrect, comme mentionné par Freerunnering, essayez plutôt ceci:
// Determile cache file path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0],@"index.html"];
// Download and write to file
NSURL *url = [NSURL URLWithString:@"http://www.google.nl"];
NSData *urlData = [NSData dataWithContentsOfURL:url];
[urlData writeToFile:filePath atomically:YES];
// Load file in UIWebView
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
Remarque: Le traitement correct des erreurs doit être ajouté.
NSDocumentDirectory sera sauvegardé sur iCloud. Vous feriez peut-être mieux d'utiliser NSCachesDirectory https://developer.Apple.com/library/ios/#qa/qa1719/_index.html
Votre application est un dossier avec une extension .app à la fin. Sur l'iPhone une fois installé, vous ne pouvez pas modifier ce dossier. Par conséquent, sauvegardez-le dans le répertoire de documents.
Dans votre exemple de code, sauvegardez le fichier dans Documents/index.html et demandez-lui de charger appname.app/index.html.
[NSBundle mainBundle] ne vous donne pas le répertoire de documents qu'il vous donne (je pense) le dossier .app (bien qu'il puisse s'agir du dossier contenant l'application, les documents et d'autres dossiers).
Pour vous donner envie de changer cette ligne.
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
To (à condition que ce soit la même méthode que le reste du code, sinon recréez l'objet 'filePath')
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath isDirectory:NO]]];
Voici la version 2.x de Swift:
var paths: [AnyObject] = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
var filePath: String = "\(paths[0])/\("index.html")"
// Download and write to file
var url: NSURL = NSURL(string: "http://www.google.nl")!
var urlData: NSData = NSData.dataWithContentsOfURL(url)
urlData.writeToFile(filePath, atomically: true)
// Load file in UIWebView
web.loadRequest(NSURLRequest(URL: NSURL.fileURLWithPath(filePath)))