UIWebview xml文件
我一直在尝试在我的uiwebview中显示一个XML文件。 我试过使用NSURLRequest,但UIWebview显示空白。 我能够显示一个本地的XML使用下面的代码。 有没有办法从定义的网站,而不是从本地文件,或者下载文件,然后显示它呢?
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:@""]];
设置你的UIWebView
委托,并定义webView:didFailLoadWithError:
和– webViewDidFinishLoad:
如果你把NSLog
痕迹放在那里(或者用debugging器闯入),你可能会明白发生了什么事情。
原则上,如果您可以显示本地文件,则可以显示来自远程服务器的相同信息。 所以我想,也许你的服务器没有正确回答( didFail:
将帮助你理解)。
编辑:
mimetype是由服务器发送的,我不知道有什么办法在UIWebView
处理它之前修改它。
您可以通过以下方式轻松下载文件:
NSData *urlData = [NSData dataWithContentsOfURL:url];
然后您可以将数据传递到Web视图中,就像您已经在做的那样。
考虑到dataWithContentsOfURL:
是同步的,所以它会停止你的用户界面(但是对于testing来说是可以的)。 如果一切正常,那么你可以在后台线程上运行它,就像这样:
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:@""]]; } }
注意一旦XML下载完成后,如何回到UIWebView
是通过主线程完成的。
@sergio方法的作品。 另一种方法是下载文件,将其存储在本地,然后加载。
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];
请使用以下代码从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];