• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Falscher NSDocumentDirectory?

muhlba91

Braeburn
Registriert
14.01.11
Beiträge
42
Hallo!

Ich arbeite seit einiger Zeit an einem iPhone App. Da ich Student bin und eher weniger Geld zum Ausgeben habe, habe ich mich entschieden vorerst meine App via Cydia bzw. OpenSSH - zu meinen Testzwecken - zu installieren. Soweit so gut...
Nun muss ich aber Dateien in den NSDocumentDirectory speichern, der normalerweise ja bei /var/mobile/Library/<AppName> o.Ä. sein sollte. Da ich ja wie vorher schon erwähnt das Ganze nicht "offiziell" installiere habe ich mit meinem Document Directory ein Problem, denn gib ich den aus, liegt der auf meinem iPhone 4 mit 4.2.1 auf /var/mobile/Documents . :-[
Da dieser Ordner nicht besonders gut für mich ist, da er in keinem Bezug zu meiner App steht, frage ich mich nun, ob ich was falsch mache (z.b. beim Installieren oder Abrufen des NSDocumentDirectory)? Habt ihr eine Idee woran das Ganze liegen könnte? :-c

Zur Information: ich hole mir den NSDocumentDirectory so:
Code:
NSArray *paths = NSSearchPathForDirectoriesInDomains( 	NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

LG Daniel
 
ne das ist schon so richtig. Auf dein Programmverzeichnis greifst du mittels NSBundle zu. Da hast du auch gute methoden um auf bestimmte Inhalte zuzugreifen, so dass du am Ende überhaupt nicht mit Pfadangaben arbeiten musst.
 
OK, danke. Aber soweit ich weiß, kriege ich mit NSBundle nur mein mainBundle, also das Verzeichnis worin meine App liegt. Darauf habe ich aber keinen Schreibzugriff, weswegen es den DocumentDirectoy gibt (worin mein Problem liegt). Oder habe ich das falsch verstanden?

Um die Situation klarer darzustellen:
in meinem mainBundle existiert eine "demo-Datei" (im mainBundle), die gelesen wird wenn noch keine benutzerdefinierte Datei (darin sind Login-Daten gespeichert) existiert. Sobald der User seine Daten angibt, soll er diese benutzerdefinierte Datei anlegen (irgendwohin, wo ich Schreibzugriff habe und die Datei persistent bleibt). Und eben beim Anlegen scheitert es: Angeblich soll der DocumentDirectory bei (s. oben) liegen. Installiere ich mein App via OpenSSH oder Cydia und logge nur den Pfad mit, wohin er die neue Datei schreiben will (eben den geholten NSDocumentDirectory) dann ist der /var/mobile/Documents. So, dieser existiert aber nicht (und der gefällt mir ja auch nicht besonders, da er nichts mit meiner App zu tun hat) und somit kann er die Datei nicht anlegen. Erstelle ich manuell diesen Ordner funktioniert alles so wie es sein soll, da der für ihn bekannte NSDocumentDirectory da ist.
 
also bei mir gibt es den Ordner. Aber du kannst doch nicht erwarten, dass du einen Schreibzugriff auf das App-Verzeichnis bekommst. Somit könntest du ja einfach die Binarys anderer Apps austauschen.

Sonst schau mal in der Datei "NSPathUtilities.h" rein. Da sind die ganzen Konstanten gespeichert. Habe hier leider kein iOS SDK installiert, sonst würde ich da selbst mal kurz reinschauen
 
Echt? Gibt es bei dir /var/mobile/Documents standardmäßig? Und wenn ja: mich stört einfach, dass dieser Ordner nicht Appbezogen ist - wenn ich settings.xml speichere, könnte das ja ein anderes App überschreiben... :-(

Und ja, das erwarte ich ja nicht. Deshalb war ja meine Frage auf den NSDocumentDirectory bezogen, der ja nicht auf /var/mobile/Library/<AppName>/Documents o.Ä. zeigt, sondern auf /var/mobile/Documents.

Existiert die Datei nicht, interpretiere Datei im mainBundle, schreibt er Datei dann in NSDocumentDirectory. Existiert diese Datei dann, interpretiere die. Die kann aber nie existieren, wenn nicht einmal der NSDocumentDirectory existiert bzw. nicht auf das zeigt, was man eigentlich erwarten würde... (Ich hoffe, ich habe keinen Denkfehler, was das Verhalten von Cydia-Apps, ... angeht.)

Edit: laut http://thebigboss.org/hosting-repository/submit-your-app/compile-for-cydia-submission muss ich den Documents folder selbst anlegen was ich auch mache ( mkdir(“/var/mobile/Library/YOURAPPNAME”, 0755); ), aber wenn mein NSDocumentDirectory nicht dahin zeigt, was bringt mir der Folder dann wenn ich ihn anlege?