Подтвердить что ты не робот

IPhone dev: загрузить файл из папки ресурсов

Я пишу 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 файл в подкаталоге в моих ресурсах?

В течение последних нескольких дней я все время сталкивался с stackoverflow и остальными трубами, пытаясь понять это, но нигде я не нашел решения этой точной проблемы. Любая проницательность вообще была бы очень-очень оценена!

EDIT: Yoohoo! Я понял! Какая радость! Вот что я сделал:

  • Импортировал мои ресурсы заново, выбрав "Создать ссылки на папки для любых добавленных папок" вместо "Рекурсивно создавать группы для любых добавленных папок".
  • Указал корневой каталог ресурса, например: NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];
4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

  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". Никаких других изменений не требовалось.