2010-03-25 16 views
19

Ich schreibe eine iPhone-App mit einem UIWebView, die verschiedene HTML-Dateien anzeigen soll, die ich im App-Ressourcenordner habe. In Xcode meiner Projektübersicht werden diese HTML-Dateien wie folgt angezeigt:iPhone dev: Laden Sie eine Datei aus dem Ressourcen-Ordner

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

Diese Ressourcen, wo das Projekt als solches hinzugefügt:

  • Checked „kopieren Elemente in Zielgruppen-Ordner (falls erforderlich)“ .
  • Referenztyp: Standard.
  • Textkodierung: Unicode (utf-8).
  • Erstellen Sie rekursiv Gruppen für alle hinzugefügten Ordner.

Die Links in meinem html sind relativ, das heißt, sie wie folgt aussehen:

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

Um die index.html angezeigt werden, wenn die Anwendung gestartet wird, verwende ich den folgenden Code:

NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; 
NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

Das funktioniert gut. Folgende Links aus der Indexdatei funktionieren auch, solange die angeforderten HTML-Dateien direkt unter dirA liegen. Wenn der folgende Link auf eine Datei in einem Unterverzeichnis verweist, wird didFailLoadWithError die Situation abfangen und melden, dass die angeforderte Datei nicht existiert. Auch

,

[webView loadHtmlString:myHtml]; 

kann nicht Teil der Lösung sein, da ich zurück und nach vorn Tasten müssen in meiner Web-Ansicht arbeiten.

Die Frage ist also: Wie kann ich einen relativen Link zu einer HTML-Datei in einem Unterverzeichnis innerhalb meiner Ressourcen folgen?

Ich war in den letzten paar Tagen überall auf Stackoverflow und dem Rest der Röhren, um herauszufinden, aber nirgendwo habe ich die Lösung für dieses genaue Problem gefunden. Jede Einsicht würde sehr, sehr geschätzt!

EDIT: Yoohoo! Ich habe es herausgefunden! Was ein Spaß! Hier ist was ich getan habe:

  1. Importiert meine Ressourcen neu, wählen Sie "Ordnerverweise für alle hinzugefügten Ordner erstellen" statt "rekursiv Gruppen für alle hinzugefügten Ordner erstellen."
  2. das Stammverzeichnis für Ressource angegeben, etwa so: NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"dirA"];

Antwort

13

Um Ordner im App-Bundle zu erstellen, ziehen Sie den Ordner zu Xcode und wählen den Radioknopf: "Erstellen Sie Ordnerreferenzen für alle hinzugefügten Ordner".

+0

Ja, danke. Wie Sie von meiner Bearbeitung (der Originalfrage) sehen können, habe ich diese selbst einige Stunden alt entdeckt. Es scheint, als gäbe es kein "Ich habe es endlich selbst herausgefunden" -Bit. Naja. Ich gebe dir nur die Ehre :-) – thomax

+0

Ich möchte das gleiche Ergebnis erhalten, aber ich habe bereits die Ordner hinzugefügt. Gibt es dem xcode irgendwie beizubringen, das in Ordnern danach zu organisieren? – amok

2

Die Unterverzeichnisse Sie in XCode verwenden sind Gruppen nicht unbedingt Ordner. Alle Ressourcen werden wahrscheinlich in den Ausgabeordner geglättet. Wenn Sie tatsächliche Ordner außerhalb von XCode erstellen, die möglicherweise funktionieren. Versuchen Sie, die Ordner- und Dateihierarchie zu erstellen und ziehen Sie sie in XCode. Überprüfen Sie auch Ihren Build-Ordner mit Finder, um genau zu sehen, wie XCode Ihre Dateien bereitstellt.

+0

Danke für die schnelle Antwort! Die Ordner sind tatsächliche Ordner im Dateisystem und werden genau wie in XCode vorgeschlagen verschoben/abgelegt. Im Build-Ordner (und im implementierten Ordner im Simulator) werden alle Ressourcen ausgeblendet. Keine Hierarchie dort. Ich bestätige dies, indem ich einen meiner Links so ändere, dass er auf eine Wurzelressource des Dateinamens zeigt, der in einem Unterverzeichnis sein sollte; Die Anfrage ging durch. Irgendwelche anderen Vorschläge? – thomax

2

Ich habe HTML-Dateien mit Ressourcen und Links mit relativen Pfaden verwendet, indem ich den +fileURLWithPath: Initialisierer anstelle von +URLWithString: beim Laden einer HTML-Zeichenfolge und übergeben einer baseURL in der Webansicht verwendet.

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" ist meine Entsprechung für Ihr "dirA". Keine weiteren Änderungen waren erforderlich.

Verwandte Themen