iPhone dev: Załaduj plik z folderu zasobów

Piszę aplikację na iPhone ' a z UIWebView, która powinna wyświetlać różne pliki html, które mam w folderze zasobów aplikacji. W Xcode mój przegląd projektu, Te pliki html są wyświetlane w następujący sposób:

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

Te zasoby, które zostały dodane do projektu jako takie:

  • zaznaczono opcję " Kopiuj elementy do folderu grupy docelowej (w razie potrzeby)".
  • Typ odniesienia: domyślny.
  • kodowanie tekstu: Unicode (utf-8).
  • rekurencyjnie tworzy grupy dla dowolnych dodane foldery.

Linki w moim html są względne, co oznacza, że wyglądają tak:

<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>

W celu wyświetlenia indeksu.html po uruchomieniu aplikacji używam następującego kodu:

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];
To działa dobrze. Następujące linki z pliku indeksu również działają dobrze, tak długo, jak żądane pliki html są bezpośrednio pod dirA. Jeśli odnośnik wskazuje na plik w podkatalogu, to didFailLoadWithError wykryje sytuację i zgłosi, że żądany plik nie istnieć.

Również,

[webView loadHtmlString:myHtml];

Nie może być częścią rozwiązania, ponieważ potrzebuję przycisków Wstecz i do przodu, aby działać w moim widoku sieci.

Więc pytanie brzmi: Jak mogę śledzić względny link do pliku html w podkatalogu w moich zasobach?

Przez ostatnie kilka dni sprawdzałem stackoverflow i resztę rur, próbując to rozgryźć, ale nigdzie nie natrafiłem na rozwiązanie tego problemu. Każdy wgląd byłby bardzo, bardzo doceniam to!

EDIT: Yoohoo! Rozgryzłem to! Co za radość! Oto co zrobiłem:

  1. Zaimportowano ponownie Moje zasoby, wybierając "Utwórz referencje folderów dla dodanych folderów "zamiast" rekurencyjnie utwórz grupy dla dodanych folderów."
  2. podano katalog główny dla zasobu, w ten sposób: NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];
Author: thomax, 2010-03-25

3 answers

Aby utworzyć foldery w pakiecie aplikacji przeciągnij folder do Xcode i wybierz przycisk radiowy: "Utwórz odwołania do folderów dla dodanych folderów".

 13
Author: zaph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-26 11:55:41

Podkatalogi używane w XCode są grupami, a nie rzeczywistymi folderami. wszystkie zasoby są prawdopodobnie spłaszczone do folderu wyjściowego. Jeśli utworzysz rzeczywiste foldery poza XCode, które mogą działać. Spróbuj utworzyć folder i plik heirarchia i przeciągnij / upuść do XCode. Sprawdź również folder kompilacji za pomocą programu Finder, aby zobaczyć, jak XCode wdraża Twoje pliki.

 2
Author: Cliff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-25 17:41:25

Udało mi się użyć plików HTML zawierających zasoby i linki przy użyciu ścieżek względnych za pomocą inicjalizatora +fileURLWithPath: zamiast +URLWithString: Podczas ładowania ciągu HTML i przekazywania baseURL w widoku sieci Web.

  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" jest moim odpowiednikiem dla twojego "dirA". Inne zmiany nie były wymagane.

 2
Author: aldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-23 14:37:18