IOS загружает и сохраняет файл HTML
Я пытаюсь загрузить веб-страницу (html), а затем отобразить локальный html, который был загружен в UIWebView.
Вот что я пробовал -
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.
Но это дает ошибку "SIGABRT".
Не слишком уверен, что я сделал неправильно?
Любая помощь будет оценена по достоинству. Спасибо!
Ответы
Ответ 1
Путь, переданный в UIWebView, неверен, например, упомянутый выше Freerunnering, попробуйте это вместо:
// 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]]];
Примечание. Необходимо добавить правильную обработку ошибок.
Ответ 2
NSDocumentDirectory будет скопирован в iCloud. Возможно, вам лучше использовать NSCachesDirectory https://developer.apple.com/library/ios/#qa/qa1719/_index.html
Ответ 3
Ваше приложение представляет собой папку с расширением .app в конце. На iPhone после его установки вы не можете изменить эту папку, поэтому вы сохраните ее в каталоге документов.
В вашем примере кода вы сохраняете файл в Documents/index.html и запрашиваете его для загрузки appname.app/index.html.
[NSBundle mainBundle] не дает вам каталог документов, который он дает вам (я думаю) папку .app(хотя это может быть папка, содержащая приложение, документы и другие папки).
Чтобы вы хотели изменить эту строку.
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
To (при условии, что это тот же самый метод, что и остальная часть кода, иначе воссоздайте объект 'filePath')
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath isDirectory:NO]]];
Ответ 4
Вот версия Swift 2.x:
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)))