web-dev-qa-db-ja.com

iPhone開発者:リソースフォルダからファイルをロードします

アプリのリソースフォルダーにあるさまざまなhtmlファイルを表示するUIWebViewを使用してiPhoneアプリを作成しています。 xcode my project Overviewでは、これらの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ファイルへの相対リンクをたどるにはどうすればよいですか?

私は過去数日間、スタックオーバーフローと残りのチューブをくまなく調べてこれを理解しようとしましたが、この正確な問題の解決策はどこにもありません。どんな洞察も非常に、非常に高く評価されます!

編集:ユーフー!私はそれを考え出した!なんて嬉しい!これが私がしたことです:

  1. 「追加されたフォルダのグループを再帰的に作成する」ではなく、「追加されたフォルダのフォルダ参照を作成する」を選択して、リソースを新たにインポートしました。
  2. 次のように、リソースのルートディレクトリを指定しました:NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];
19
thomax

アプリバンドルにフォルダーを作成するには、フォルダーをXcodeにドラッグし、[追加されたフォルダーのフォルダー参照を作成する]ラジオボタンを選択します。

13
zaph

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
aldi

XCodeで使用するサブディレクトリは、実際のフォルダではなくグループです。すべてのリソースが出力フォルダーにフラット化されている可能性があります。 XCodeの外部に実際のフォルダを作成すると、機能する可能性があります。フォルダとファイルの階層を作成し、XCodeにドラッグ/ドロップしてみてください。また、Finderを使用してビルドフォルダをチェックし、XCodeがファイルをどのように展開しているかを正確に確認します。

2
Cliff