我正在编写一个带有UIWebView的iPhone应用程序,它应该显示我在app资源文件夹中的各种html文件。在xcode我的项目概述中,这些html文件显示如下:
dirA
|---> index.html
|---> a1.html
|---> a2.html
|---> my.css
|---> dirB
|---> b1.html
|---> b2.html
|---> dirC
|---> c1.html
|---> c2.html
这些资源如此添加到项目中:
我的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文件的相对链接?
过去几天我一直在堆栈溢出和其余的管子试图找出这个,但我没有遇到这个确切问题的解决方案。任何见解都会非常非常感激!
编辑: Yoohoo!我想到了!什么快乐!这是我做的:
NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];
答案 0 :(得分:13)
要在应用程序包中创建文件夹,请将文件夹拖到Xcode并选择单选按钮:“为任何添加的文件夹创建文件夹引用”。
答案 1 :(得分:2)
您在XCode中使用的子目录是组而不是实际文件夹。所有资源都可能被平铺到输出文件夹中。如果您在XCode之外创建可能有效的实际文件夹。尝试创建文件夹和文件heirarchy并拖放到XCode中。还可以使用Finder检查构建文件夹,以确切了解XCode如何部署文件。
答案 2 :(得分:2)
在加载HTML字符串并在Web视图中传递baseURL时,我设法使用+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]];
&#34; HTMLContent&#34;是我的等同于你的&#34; dirA&#34;。不需要进行其他更改。