Der Dateimanager findet manchmal keinen Unterordner im Dokumentenverzeichnis

9

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:

%Vor%

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:

%Vor%

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:

%Vor%

Mein WKWebView wird mit dem folgenden Code deklariert:

%Vor%

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:

%Vor%

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:

%Vor%

Irgendwie verwirrte mich das noch mehr.

Warum funktioniert es bei der ersten Präsentation und dann nicht?

    
Ivan Cantarino 12.12.2017, 19:14
quelle

1 Antwort

0

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.

    
florieger 21.12.2017 17:54
quelle

Tags und Links