2010-03-25 77 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” 是我等同为贵 “迪拉”。没有其他更改是必需的。