2010-03-25 2 views
19

Я пишу приложение iPhone с UIWebView, которое должно отображать различные html-файлы, которые у меня есть в папке ресурса приложения. В Xcode мой обзор проекта, эти HTML файлы отображаются следующим образом:iPhone dev: загрузить файл из папки ресурсов

dirA 
|---> index.html 
|---> a1.html 
|---> a2.html 
|---> my.css 
|---> dirB 
     |---> b1.html 
     |---> b2.html 
|---> dirC 
     |---> c1.html 
     |---> c2.html 

Эти ресурсы, где добавлены к проекту, например:

  • Checked «Копировать элементы в папку группы назначения (если это необходимо)» ,
  • Тип ссылки: По умолчанию.
  • Кодировка текста: Юникод (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-файл в подкаталоге в моих ресурсах?

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

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

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

ответ

13

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

+0

Да, спасибо. Как вы можете видеть мое редактирование (первоначального вопроса), я сам это обнаружил в течение нескольких часов. Кажется, нет «я, наконец, понял это сам» -бит. Ну что ж. Я просто дам вам кредит :-) – thomax

+0

Я хотел бы получить тот же результат, но я уже добавил папки. Есть ли способ научить xcode организовывать это в папках впоследствии? – amok

2

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

+0

Спасибо за быстрый ответ! Папки представляют собой фактические папки в файловой системе, перетаскиваются точно так же, как вы предлагаете в XCode. В папке сборки (и в развернутой папке в симуляторе) все ресурсы сглажены. Нет иерархии. Я подтвердил это, изменив одну из моих ссылок, чтобы указать на корневой ресурс имени файла, который должен находиться в подкаталоге; запрос прошел. Любые другие предложения? – thomax

2

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