Webページ(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」エラーが発生します。
私が何を間違えたのかよくわかりませんか?
任意の助けいただければ幸いです。ありがとう!
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]]];
注:正しいエラー処理を追加する必要があります。
NSDocumentDirectoryはiCloudにバックアップされます。 NSCachesDirectory https://developer.Apple.com/library/ios/#qa/qa1719/_index.html を使用したほうがよい場合があります。
アプリは、末尾に.app拡張子が付いたフォルダーです。 iPhoneをインストールすると、このフォルダを変更することはできません。そのため、ドキュメントディレクトリに保存する必要があります。
サンプルコードでは、ファイルをDocuments/index.htmlに保存し、appname.app /index.htmlをロードするように依頼します。
[NSBundle mainBundle]は、.appフォルダー(アプリ、ドキュメント、その他のフォルダーを含むフォルダーである可能性があります)を提供するdocumentsディレクトリを提供しません。
与えるために、この行を変更したいと思うでしょう。
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]isDirectory:NO]]];
(これがコードの他の部分と同じメソッドである場合は、オブジェクト 'filePath'を再作成します)
[web loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath isDirectory:NO]]];
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)))