Ответ 1
Чтобы создать папки в комплекте приложения, перетащите папку в Xcode и выберите переключатель: "Создать ссылки на папки для любых добавленных папок".
Я пишу iPhone-приложение с UIWebView, которое должно отображать различные html файлы, которые у меня есть в папке ресурса приложения. В xcode мой обзор проекта эти html файлы отображаются следующим образом:
dirA
|---> index.html
|---> a1.html
|---> a2.html
|---> my.css
|---> dirB
|---> b1.html
|---> b2.html
|---> dirC
|---> c1.html
|---> c2.html
Эти ресурсы, добавленные в проект как таковой:
Ссылки в моем 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"];
Чтобы создать папки в комплекте приложения, перетащите папку в Xcode и выберите переключатель: "Создать ссылки на папки для любых добавленных папок".
Подкаталоги, используемые в XCode, представляют собой группы, не являющиеся фактическими папками. все ресурсы, вероятно, будут сглажены в выходной папке. Если вы создадите фактические папки вне XCode, которые могут работать. Попробуйте создать папку и файл иерархии и перетащить в XCode. Также проверьте свою папку сборки с помощью Finder, чтобы точно увидеть, как XCode развертывает ваши файлы.
Мне удалось использовать 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". Никаких других изменений не требовалось.