2013-07-22 20 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