iPhone dev: загрузить файл из папки ресурсов - PullRequest
19 голосов
/ 25 марта 2010

Я пишу приложение для iPhone с UIWebView, которое должно отображать различные 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 ]

13 голосов
/ 26 марта 2010

Чтобы создать папки в комплекте приложений, перетащите папку в Xcode и выберите переключатель: «Создать ссылки на папки для всех добавленных папок».

2 голосов
/ 23 ноября 2010

Мне удалось использовать файлы HTML, содержащие ресурсы и ссылки, используя относительные пути, используя инициализатор +fileURLWithPath: вместо +URLWithString: при загрузке строки HTML и передаче baseURL в веб-представлении.

  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 голосов
/ 25 марта 2010

Подкаталоги, которые вы используете в XCode, являются группами, а не фактическими папками.все ресурсы, вероятно, распределяются в выходную папку.Если вы создаете реальные папки вне XCode, это может работать.Попробуйте создать папку и иерархию файлов и перетащите их в XCode.Также проверьте папку сборки с помощью Finder, чтобы точно узнать, как XCode развертывает ваши файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...