【问题标题】:iPhone dev: load a file from resource folderiPhone dev:从资源文件夹加载文件
【发布时间】:2011-01-31 20:29:50
【问题描述】:

我正在编写一个带有 UIWebView 的 iPhone 应用程序,它应该显示我在应用程序资源文件夹中拥有的各种 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];

不能成为解决方案的一部分,因为我需要后退和前进按钮才能在我的 Web 视图中工作。

所以问题是:如何在我的资源的子目录中找到指向 html 文件的相对链接?

在过去的几天里,我一直在研究 stackoverflow 和其他管子,试图弄清楚这一点,但我在任何地方都没有找到解决这个确切问题的方法。任何见解都将非常非常感谢!

编辑: 哇哦!我想到了!多么快乐!这是我所做的:

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

【问题讨论】:

    标签: iphone resources uiwebview directory relative-path


    【解决方案1】:

    在加载 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]];
    

    “HTMLContent”相当于你的“dirA”。无需进行其他更改。

    【讨论】:

      【解决方案2】:

      要在应用程序包中创建文件夹,请将文件夹拖到 Xcode 并选择单选按钮:“为任何添加的文件夹创建文件夹引用”。

      【讨论】:

      • 好的,谢谢。正如您在我的编辑(原始问题)中所看到的那样,我在几个小时前就自己发现了这一点。似乎没有“我终于自己弄明白了”——有点。那好吧。我只会给你功劳:-)
      • 我想获得相同的结果,但我已经添加了文件夹。有没有办法教 xcode 之后在文件夹中组织它?
      【解决方案3】:

      您在 XCode 中使用的子目录是组而不是实际文件夹。所有资源都可能被展平到输出文件夹。如果您在 XCode 之外创建可能有效的实际文件夹。尝试创建文件夹和文件层次结构并将其拖放到 XCode 中。还可以使用 Finder 检查您的构建文件夹,以了解 XCode 是如何部署您的文件的。

      【讨论】:

      • 感谢您的快速回复!这些文件夹是文件系统上的实际文件夹,完全按照您的建议拖放到 XCode 中。在 build 文件夹(以及模拟器中的已部署文件夹)中,资源都被展平了。那里没有等级制度。我通过将其中一个链接更改为指向应该位于子目录中的文件名的根资源来确认了这一点;请求通过了。还有其他建议吗?
      猜你喜欢
      • 2013-03-22
      • 2014-12-27
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      相关资源
      最近更新 更多