2010-03-25 125 views
19

我正在寫一個UIWebView的應用程序,它應該顯示我在應用程序資源文件夾中的各種HTML文件。在Xcode我的項目概況,這些HTML文件顯示如下:iPhone開發:從資源文件夾加載文件

dirA 
|---> index.html 
|---> a1.html 
|---> a2.html 
|---> my.css 
|---> dirB 
     |---> b1.html 
     |---> b2.html 
|---> dirC 
     |---> c1.html 
     |---> c2.html 

其中添加到項目中這樣這些資源:

  • 經過「複製項目到目的地組文件夾(如果需要)」 。
  • 參考類型:默認。
  • 文本編碼:Unicode(utf-8)。
  • 以遞歸方式爲任何添加的文件夾創建組。

在我的HTML鏈接是相對的,這意味着它們看起來就像這樣:

<a href="a1.html">a1</a> 
<a href="a2.html">a2</a> 
<a href="dirB/b2.html">b2</a> 
<a href="dirC/c1.html">c1</a> 

爲了顯示的index.html時,應用程序啓動時,我使用下面的代碼:

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

這工作正常。只要所需的html文件直接位於dirA下,索引文件中的以下鏈接也可正常工作。如果後面的鏈接指向子目錄中的文件,則didFailLoadWithError將捕獲該情況並報告所請求的文件不存在。

此外,

[webView loadHtmlString:myHtml]; 

不能成爲解決方案的一部分,因爲我需要前進和後退按鈕在我的網頁視圖工作。

所以問題是:我如何遵循一個相對鏈接到我的資源內的子目錄中的HTML文件?

我已經遍佈了stackoverflow和過去幾天試圖找出這一個,但我沒有遇到這個確切的問題的解決方案的其餘管。任何有識之士都會非常非常感謝!

編輯: Yoohoo!我想到了!什麼喜悅!以下是我所做的:

  1. 重新導入我的資源,選擇「爲所有添加的文件夾創建文件夾引用」而不是「爲所有添加的文件夾遞歸創建組」。
  2. 指定資源的根目錄,例如:NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];

回答

13

要在應用程序包中創建文件夾,請將該文件夾拖到Xcode並選擇單選按鈕:「爲所有添加的文件夾創建文件夾參考」。

+0

是的,謝謝。正如你可以看到我的編輯(原始問題),我自己在幾個小時的時間裏就發現了這一點。似乎沒有「我終於自己想出了」 - 位。好吧。我只是給你信貸:-) – thomax 2010-03-26 13:42:13

+0

我想獲得相同的結果,但我已經添加了文件夾。無論如何教xcode來組織文件夾之後呢? – amok 2010-09-25 19:44:02

2

你在XCode中使用該子目錄組不是實際的文件夾。所有的資源都可能被壓縮到輸出文件夾。如果您在XCode之外創建可能有效的實際文件夾。嘗試創建文件夾和文件heirarchy並拖放到XCode中。還可以使用Finder檢查您的構建文件夾,以確切瞭解XCode如何部署文件。

+0

感謝您的快速回復!這些文件夾是文件系統上的實際文件夾,完全按照您在XCode中的建議進行拖放。在構建文件夾(以及模擬器中的已部署文件夾)中,資源都是平坦的。沒有層次結構。我確認了這一點,將我的一個鏈接改爲指向應該位於子目錄中的文件名的根資源;請求已經完成。 其他建議? – thomax 2010-03-25 20:46:13

2

我管理通過加載的HTML字符串和在web視圖傳遞時基本URL使用+fileURLWithPath:初始化,而不是+URLWithString:使用含有使用相對路徑資源和鏈接的HTML文件。

NSString* path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"HTMLContent"]; 
    NSString* htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; 
    [self.webView loadHTMLString:htmlString baseURL:[NSURL fileURLWithPath:path]]; 

「HTMLContent」 是我等同爲貴 「迪拉」。沒有其他更改是必需的。