2009-07-18 3 views
2

Ich habe mehrere Codeschnipsel gefunden, die beschreiben, wie Daten in den Anwendungsdokumentenordner eines Benutzers geschrieben werden. Wenn ich dies jedoch im iPhone-Simulator ausprobiere, werden keine Dateien erstellt. Ich riefWarum kann ich keine Dateien in das Dokumentenverzeichnis meiner App schreiben?

[NSFileManager isWritbleAtPath:<my document folder>]

und es ergab 0 (false). Muss ich diesen Ordner explizit beschreibbar machen, und wenn ja, wie mache ich das?

Antwort

0

Danke für die Zeiger. Nachdem ich mich durch ein paar Dokumente gequält hatte, fand ich die Sache, die ich falsch machte: Versuch, ein NSArray zu speichern, das nicht aus grundlegenden Datentypen wie NSDictionary, NSArray oder NSString bestand. Ich habe versucht, ein Array von MPMediaItems zu speichern (aus dem MediaKit Framework in SDK 3.0+).

2

Der iPhone-Simulator sollte in der Lage sein, auf die gesamte Festplatte zu schreiben. Meine App speichert routinemäßig Testdateien auf der Stammebene meines Startvolumes (mit [NSData's writeToPath:@"/test.jpg" atomically:NO]).

Sind Sie sicher, dass Sie den Pfad zum Dokumentenordner korrekt festgelegt haben? Sie müssen die Tilde im Pfad erweitern. Hier ist der Code, mit dem meine App Dinge in den Dokumentenordner legt. Ich glaube nicht, dass es mehr Setups gibt!

brushesDir = [[@"~/Documents/BrushPacks/" stringByExpandingTildeInPath] retain]; 
// create brush packs folder if it does not exist 
if (![[NSFileManager defaultManager] fileExistsAtPath: brushesDir]) 
      [[NSFileManager defaultManager] createDirectoryAtPath:brushesDir withIntermediateDirectories:YES attributes:nil error:nil]; 
+0

Ich vermutete so viel. Ich werde es versuchen. Vielen Dank! – casademora

1
NSLog(@"writable: %d", [[NSFileManager defaultManager] isWritableFileAtPath:NSHomeDirectory()]); 

Dieser druckt 1 auf der Konsole.

Wollten Sie die Methode isWritableAtPath oder isWritableFileAtPath aufrufen? Und meinst du es auf die Klasse selbst oder auf eine (Standard) Instanz davon zu nennen?

+0

Ich habe das versucht, und es gibt 0 zurück. Das hat mich wundern, was ich falsch mache – casademora

0

Ich hatte ein triviales Problem mit der Datei schreiben an NSBundle. Ich hatte eine Anforderung, bei der eine Textdatei mit dem Server aktualisiert werden muss, sobald die App startet, und es funktionierte gut mit dem Simulator, aber nicht mit dem Gerät. Später fand ich heraus, dass wir keine Schreibrechte bei NSBundle haben. Kopieren der Datei in das Verzeichnis Documents von NSBundle und für meine Zwecke zu verwenden löste mein Problem. Ich benutze: [myPlistData writeToFile:fileName atomically:NO];