2013-07-22 21 views
0

我一直试图在我的uiwebview中显示一个xml文件。我试过使用NSURLRequest,但UIWebview显示为空白。我能够使用下面的代码显示本地xml。有没有办法从定义的网站而不是从本地文件中提取该文件,或者下载文件然后显示它?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:@""]]; 

回答

0

设置你的UIWebView代表和定义webView:didFailLoadWithError:– webViewDidFinishLoad:;如果你把一些NSLog的痕迹放在那里(或者用调试器闯入它们),你可能会明白发生了什么。

原则上,如果您可以显示本地文件,则可以显示来自远程服务器的相同信息。所以我在想,也许你的服务器没有正确回复(并且didFail:会帮助你理解)。

编辑:

的MIME类型由服务器发送的,我不知道的方法来修改它的UIWebView得到处理之前。

你可以很容易的方式下载一个文件:

NSData *urlData = [NSData dataWithContentsOfURL:url]; 

,然后你可以将数据传递到Web视图,你已经在做。

考虑到dataWithContentsOfURL:是同步的,所以它会停止你的用户界面(但是对于测试来说它没问题)。如果一切顺利,那么你就可以在后台线程运行,这将是这样的:

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:@""]]; 

    } 
} 

注意如何让回UIWebView一旦被下载的XML通过主线程中完成的。

+0

谢谢您的回复,但服务器工作正常,我还在新的ios,但我相信它有处理文件类型。在本地我可以定义允许显示文件的mimetype,如果我改变这个页面显示空白,类似于我使用NSUrlrequest时。如果有一种方法可以让我1.)下载文件,然后加载存储的一个或2)当使用NSURlrequest/loadrequest应该工作,但我不知道如何定义mimetype。 –

+0

我试过这个: NSURL * url = [NSURLURLWithString:@“http://location.com/thexml.xml”]; NSData * htmlData = [NSData dataWithContentsOfFile:url]; [aWebView loadData:htmlData MIMEType:@“text/text”textEncodingName:@“UTF-8”baseURL:nil]; 但是,这崩溃了应用程序。 –

+0

你可以让它工作到底吗? – sergio

0

@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]; 
0

请使用如下代码加载本地XML文件从文件目录中的UIWebView

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]; 
+0

为什么你将xml内容嵌入到html中? – testing