0

uiwebview に xml ファイルを表示しようとしています。NSURLRequest を使用してみましたが、UIWebview が空白で表示されます。以下のコードを使用して、ローカル xml を表示できます。ローカルファイルからではなく、定義されたWebサイトからこれを取得する方法や、ファイルをダウンロードして表示する方法はありますか?

NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"location" ofType:@"xml"];
NSData *htmlData = [NSData dataWithContentsOfFile:htmlFile];
[aWebView loadData:htmlData MIMEType:@"text/text" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];
4

3 に答える 3

1

UIWebViewデリゲートを設定し、 と を定義webView:didFailLoadWithError:– webViewDidFinishLoad:ます。そこにいくつかのNSLogトレースを入れる (またはデバッガーでブレークする) と、何が起こっているのか理解できるかもしれません。

原則として、ローカル ファイルを表示できれば、リモート サーバーからの同じ情報を表示できます。したがって、サーバーが正しく応答していない可能性があると考えています(それdidFail:を理解するのに役立ちます)。

編集:

MIME タイプはサーバーから送信されますが、サーバーが処理する前に変更する方法がわかりませんUIWebView

次の方法でファイルを簡単にダウンロードできます。

NSData *urlData = [NSData dataWithContentsOfURL:url];

その後、既に行っているように、データを Web ビューに渡すことができます。

これは同期であることを考慮してdataWithContentsOfURL:、UI を停止します (ただし、テストでは問題ありません)。すべてがうまくいけば、次のようなバックグラウンド スレッドで実行できます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    NSData *htmlData = [NSData dataWithContentsOfURL:url];
    dispatch_async(dispatch_get_main_queue(), ^{

       [aWebView loadData:htmlData MIMEType:@"text/text" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:@""]];

    }
}

UIWebViewXML がダウンロードされると、メイン スレッドを介してに戻る方法に注意してください。

于 2013-07-22T15:24:50.870 に答える
0

以下のコードを使用して、uiwebview のドキュメント ディレクトリからローカル xml ファイルをロードしてください。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"demo.xml"];

NSString *content = [NSString stringWithContentsOfFile:dataPath encoding:NSUTF8StringEncoding error:NULL];

NSLog(@"contenct %@",content);

[webView loadHTMLString:[NSString stringWithFormat:@"<html><body>%@</body></html>",content] baseURL:nil];
于 2014-03-14T10:48:29.500 に答える
0

@sergio メソッドが機能します。これを実現するもう 1 つの方法は、ファイルをダウンロードし、ローカルに保存してからロードすることです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0],@"index.html"];

NSURL *url = [NSURL URLWithString:@"http://yourlocation.com/file.xml"];
NSData *urlData = [NSData dataWithContentsOfURL:url];
[urlData writeToFile:filePath atomically:YES];


[aWebView loadData:urlData MIMEType:@"text/text" textEncodingName:@"UTF-8" baseURL:nil];
于 2013-07-22T16:09:55.680 に答える