Подтвердить что ты не робот

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".

Не слишком уверен, что я сделал неправильно?

Любая помощь будет оценена по достоинству. Спасибо!

4b9b3361

Ответ 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]]];      

Примечание. Необходимо добавить правильную обработку ошибок.

Ответ 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)))