iPhone dev:从资源文件夹加载文件

时间:2010-03-25 17:29:51

标签: iphone resources uiwebview directory relative-path

我正在编写一个带有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

这些资源如此添加到项目中:

  • 选中“将项目复制到目标组文件夹(如果需要)”。
  • 参考类型:默认。
  • 文本编码: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文件的相对链接?

过去几天我一直在堆栈溢出和其余的管子试图找出这个,但我没有遇到这个确切问题的解决方案。任何见解都会非常非常感激!

编辑: Yoohoo!我想到了!什么快乐!这是我做的:

  1. 重新导入我的资源,选择“为任何添加的文件夹创建文件夹引用”,而不是“为任何添加的文件夹递归创建组。”
  2. 指定资源的根目录,如下所示:NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];

3 个答案:

答案 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;。不需要进行其他更改。