Ich habe das schon einmal gefragt, musste aber alles neu formulieren, damit es verständlicher wird.
In meinem Projekt habe ich einen Unterordner in documents directory
namens HTML
mit dem folgenden Code erstellt:
Die print-Anweisung gibt Folgendes aus:
Das Dokumentverzeichnis ist Datei: /// var / mobile / Container / Daten / Anwendung / 103869C9-9D46-4595-A370-A93BCD75D495 / Dokumente / HTML
Innerhalb der Bundle
meiner App habe ich eine .css
Datei, die ich in einer HTML
Zeichenfolge verwenden kann, um in einer WKWebView
dargestellt zu werden.
Da sich die .css
-Datei im selben Ordner wie HTML baseURL
befinden muss, kopiere ich diese .css
-Datei von Bundle
in das mit der obigen Funktion erstellte Verzeichnis mit dem folgenden Code:
Ich weiß, dass ich beide in der Bundle
der App verwenden könnte, indem ich die HTML baseURL
auf main.Bundle
setze, aber da ich lokale Bilder in den HTML
und nicht web-verknüpften Bildern präsentieren muss, musste ich verschiebe diese in einen Unterordner, damit ich später die gewünschten Bilder in diesen Unterordner kopieren kann, da main.Bundle
schreibgeschützt und nicht beschreibbar ist (Wir können dort keine Bilder speichern).
Jetzt habe ich eine ViewController
, die durch ein UINavigationController
geschoben wird; innerhalb, dass gedrückt ViewController
Ich habe eine WKWebView
, die die HTML
darstellen wird.
Ich habe auch eine var markdownString: String? {}
-Eigenschaft, die, wenn sie einmal instanziiert wurde, sie in eine HTML
-Zeichenfolge mit der folgenden Funktion konvertiert:
Mein WKWebView
wird mit dem folgenden Code deklariert:
Immer wenn meine markdown String
gesetzt ist, konvertiere ich sie in eine HTML
string, dann instanziiere ich HTML baseURL
und lade sie in meine webView
mit dem folgenden Code:
Hier beginnt mein Problem.
Die swiss.css
-Datei befindet sich im folgenden Verzeichnis:
file: /// var / mobile / Container / Daten / Anwendung / 103869C9-9D46-4595-A370-A93BCD75D495 / Dokumente / HTML /
Der HTML baseURL
zeigt auf den folgenden Pfad:
file: /// var / mobile / Container / Daten / Anwendung / 103869C9-9D46-4595-A370-A93BCD75D495 / Dokumente / HTML /
Wie Sie sehen, zeigen beide auf denselben Pfad.
Manchmal findet meine HTML
die swiss.css
Datei, da sie die items
im do{}catch{}
Block druckt, aber manchmal findet sie den Ordner nicht, die try fm.contentsOfDirectory(atPath: kPath.path)
löst einen Fehler in der catch{}
blockiert den folgenden Ausdruck:
Fehler: Fehler Domain = NSCOAErrorDomain Code = 260 "Der Ordner" HTML "existiert nicht." UserInfo = {NSFilePath = / var / mobile / Container / Daten / Anwendung / 103869C9-9D46-4595-A370-A93BCD75D495 / Documents / HTML, NSUserStringVariant = ( Mappe ), NSUnderlyingError = 0x1c044e5e0 {Fehlerdomäne = NSPOSIXErrorDomain Code = 2 "Keine solche Datei oder kein Verzeichnis"}}
Dies geschieht sowohl im Simulator als auch auf dem realen Gerät.
Was verursacht dieses Problem? Warum findet es den Ordner manchmal und manchmal auch nicht, auch ohne die App neu zu starten, wodurch der documents directory
-Pfad zurückgesetzt wird, obwohl ich den Pfad nicht erzwinge, sondern stattdessen, wie es geht siehe oben.
Ich verstehe dieses Verhalten nicht.
AKTUALISIEREN
Ich dachte also, dass das direkte Lesen der html
-Zeichenfolge einige Probleme verursachen könnte, weshalb ich meine markdown: String?
-Deklaration geändert habe.
Darin schreibe ich die konvertierte Markdown-Zeichenfolge (keine HTML-Zeichenfolge) in eine Datei im selben Pfad namens index.html
.
Jetzt ist eine andere Sache passiert - wenn ich diese Ansicht zum ersten Mal drücke, findet sie jetzt meine swiss.css
Datei und die html
Datei erkennt sie und benutzt sie wie erwartet; so weit so gut.
aber Wenn ich diesen View-Controller verlasse, zum übergeordneten View-Controller blogge (indem ich die Zurück-Taste drücke) und dann versuche, ihn erneut zu drücken, wird der gleiche Fehler (wie zuvor beschrieben) angezeigt:
Fehler beim Schreiben von HTML in Datei mit Fehler: Fehler Domain = NSCOAErrorDomain Code = 4 "Der Ordner" index.html "existiert nicht." UserInfo = {NSURL = Datei: ///var/mobile/Containers/Data/Application/C0639153-6BA7-40E7-82CF-25BA4CB4A943/Documents/HTML/index.html, NSUserStringVariant = Ordner, NSUnderlyingingError = 0x1c045d850 {Fehlerdomäne = NSPOSIXErrorDomain Code = 2 "Keine solche Datei oder kein Verzeichnis"}}
Beachten Sie, dass einige der Pfade hier anders sind als die vorherigen, weil es einen anderen Start gibt und es sich ändert, aber das ist hier nicht das Problem, da ich den Pfad nie speichere und erzwinge, schreibe ich immer die URLs mit dem Standard-Datei-Manager holen,
Die aktualisierte markdown
-Deklaration läuft folgendermaßen ab:
Irgendwie verwirrte mich das noch mehr.
Warum funktioniert es bei der ersten Präsentation und dann nicht?
In Ihrem UPDATE-Abschnitt erwähnen Sie den folgenden Fehler:
Failed to write html to file with error: Error Domain=NSCocoaErrorDomain Code=4 "The folder “index.html” doesn’t exist."
Soweit ich Ihr Problem verstanden habe, sollte index.html kein Ordner, sondern eine Datei sein.
Ich habe keine Ahnung, warum es index.html als Ordner behandelt, aber vielleicht ersetzt er let writePath = kPath.appendingPathComponent("index.html")
mit
let writePath = kPath.appendingPathComponent("index.html", isDirectory: false)
hilft oder führt zumindest zu einer spezifischeren Fehlermeldung.