iPhone - Beim Kopieren einer Datei aus Ressourcen in Dokumente tritt ein Fehler auf

8

Ich versuche, eine MP3-Datei aus meinem Ressourcen-Ordner in einen Ordner im Ordner "Dokumente" der App zu kopieren. Auf dem Simulator funktioniert das gut. Aber wenn ich es auf einem Gerät starte, gibt mir das Kopieren der Dateien diesen Fehler

%Vor%

Die Quell- und Zielpfade sind in Ordnung, aber ich kann die Datei immer noch nicht kopieren. Irgendwelche Ideen? Wo finde ich heraus, was der Kakao-Fehlercode 513 bedeutet?

Danke.

Hier ist der relevante Quelltext

%Vor%

Bevor ich moveItemAtPath anrufe, erstelle ich auch das Verzeichnis "Files" und es wird ein YES zurückgegeben.

Hier sind die Log-Ergebnisse

%Vor%

Eine Frage

Gibt es eine Grenze für die Dateigröße beim Kopieren von Daten aus Ressourcen in den Ordner "Dokumente"? Die Datei, die ich kopieren möchte, ist ungefähr 5 MB groß. Könnte das ein Grund sein?

    
lostInTransit 15.07.2009, 15:08
quelle

3 Antworten

19

BEARBEITEN:

Habe gerade eine noch einfachere Lösung gefunden. Anstatt von moveItemAtPath: toPath: error: verwende einfach copyItemAtPath: toPath: error: ... da wir die Datei wirklich aus dem mainBundle kopieren und nicht verschieben wollen. Ich hätte früher darüber nachdenken sollen!

z. B.

%Vor%

Siehe meine vorherigen Kommentare darüber, warum das funktioniert.

Ich glaube, ich habe die Antwort auf diese Frage. Ich kann sicher sagen, dass das Problem nicht der Zieldateipfad ist.

Ich bekam den gleichen Kakao-Fehler 513 (NSFileWriteNoPermissionError) mit ziemlich genau dem gleichen Code:

%Vor%

Das Problem scheint zu sein, dass die Datei, die aus dem mainBundle stammt, keine geeigneten Berechtigungen hat, um an einen anderen Ort verschoben zu werden. Ich bin mir nicht sicher, ob dieser Befehl, wenn er ausgeführt wird, die Datei tatsächlich aus dem mainBundle verschiebt oder einfach kopiert ... aber so oder so, der Dateimanager tut es nicht. Es scheint die Idee zu mögen.

Die Lösung ist einfach: Lies einfach die mainBundle-Datei in ein NSData-Objekt und schreibe dann die NSData in eine neue Datei. Beachten Sie, dass der Pfad der Zieldatei in beiden Beispielen derselbe ist, was uns zeigt, dass lostInTransit korrekt ist, wenn er sagt, dass sein Dateipfad OK ist.

In diesem Beispiel wird dann der folgende Code funktionieren und keinen Fehler auslösen:

%Vor%

Übrigens, in meinem eigenen Code, statt ein nil für Attribute zu übergeben :, habe ich ein NSDictionary mit einem NSFileModificationDate-Attribut eingerichtet. Ich habe auch die createFileAtPath: contents: -Attribute in eine Fehlerübergabe-If-Anweisung eingeschlossen. Mit anderen Worten,

%Vor%

}

Es hat eine Weile gedauert, bis ich all das herausgefunden habe, also wird diese Lösung hoffentlich für andere hilfreich sein.

    
user189541 14.10.2009, 02:57
quelle
3

Sind Sie sicher, dass Sie den Pfad zum Ordner Dokumente korrekt erhalten? Der absolute Pfad im Simulator ist anders als der absolute Pfad auf dem Gerät.

Sie sollten Folgendes verwenden, um sicherzustellen, dass Sie den richtigen Pfad zum Verzeichnis Dokumente erhalten:

%Vor%

Der Pfad für documentsDirectory auf dem Gerät lautet etwa:

/ var / mobile / Anwendungen / 30B51836-D2DD-43AA-BCB4-9D4DADFED6A2 / Dokumente

Der Pfad auf dem Simulator würde etwa lauten:

/ Volumes / Stuff / Benutzer / johnDoe / Bibliothek / Anwendungsunterstützung / iPhone Simulator / Benutzer / Anwendungen / 118086A0-FAAF-4CD4-9A0F-CD5E8D287270 / Dokumente

Sie können mehr über die Datei & amp; Netzwerkseite auf der dev Seite .

    
Michael Shnitzer 15.07.2009 15:16
quelle
2

Das ist die NSFileWriteNoPermissionError :

Ссылка

Irgendwie hast du den falschen Weg und es lässt dich nicht dort schreiben. Sie könnten die App auch löschen und es erneut versuchen, falls Ihr App-Dokumentenverzeichnis auf die falschen Berechtigungen eingestellt ist ...

Ich würde uns die Codezeile geben, die die Kopie macht, und die einzelnen Variablen ausgeben, die in dieser Zeile verwendet werden. Dann können wir sehen, was das Problem ist.

    
quelle

Tags und Links