iOS下载并保存HTML文件

时间:2011-04-09 18:17:09

标签: iphone xcode ios ios4 uiwebview

我正在尝试下载网页(html),然后显示已在UIWebView中下载的本地html。

这是我试过的 -

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'错误。

不太确定我做错了什么?

任何帮助将不胜感激。谢谢!

4 个答案:

答案 0 :(得分:23)

传递给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]]];      

注意:需要添加正确的错误处理。

答案 1 :(得分:8)

NSDocumentDirectory将备份到iCloud。你可能最好使用NSCachesDirectory https://developer.apple.com/library/ios/#qa/qa1719/_index.html

答案 2 :(得分:4)

您的应用是最后一个扩展名为.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]]];

答案 3 :(得分:0)

这是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)))