2017-12-29 40 views
-3

Ich verwende Xcode, um eine Mac OS-Anwendung mit Cocoa (Objective-C) zu erstellen.Datei kann nicht mit Cocoa mit Objective-C erstellt werden

ich zufällig eine Textdatei erstellen, wenn mein app mit der Innenseite Xcode Run-Taste ausgeführt wird, aber das Problem ist, dass die Datei nicht erstellt, wenn ich meine Anwendung aus der Verzeichnis Products/Veröffentlichung run/

Hat es etwas mit Berechtigungen zu tun?

NSString *[email protected]"Hello world"; 
NSString *[email protected]"test.txt"; 
[sometext writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL]; 
+1

Sie müssen NSSavePanel bedienen und ermöglichen dem Benutzer das Ziel oder deaktivieren APP Sandbox in Ihrem App Zielfunktionen wählen –

+0

einige Code anzeigen. – bbum

+0

Ich habe meinen Code aktualisiert, es ist nur ein einfaches Beispiel. Ich schließlich Datei in /Users/nubes/Library/Containers/nubes.fr.Proxy-Nubes-Cocoa/Data testen, wie kann ich es erstellen, wo immer die ausführbare Datei ist? – user3711521

Antwort

1

Da Sie keinen absoluten Pfad verwendet haben, ist der Pfad relativ zum aktuellen Verzeichnis des Prozesses.

Wenn Ihre App Sandboxed ist, ist das aktuelle Verzeichnis das Verzeichnis Data der App Sandbox. Aber ich denke, aufgrund Ihrer Symptome ist Ihre App nicht Sandboxed.

Wenn Ihre App nicht Sandbox ist, und Sie führen Sie es von Xcode, das aktuelle Verzeichnis ist das Verzeichnis der App enthalten (zum Beispiel /Users/mayoff/Library/Developer/Xcode/DerivedData/test-aegotyskrtnbeabaungzpkkbjvdz/Build/Products/Debug). Ihre Benutzer-ID hat die Berechtigung zum Erstellen von Dateien in diesem Verzeichnis. Ihr Code funktioniert also, wenn Sie die App über Xcode ausführen.

Wenn Ihre App nicht Sandbox ist, und Sie führen Sie es, indem Sie im Finder Doppelklick auf das aktuelle Verzeichnis ist das Stammverzeichnis (/). Ihre Benutzer-ID ist normalerweise nicht berechtigt, Dateien in diesem Verzeichnis zu erstellen. Ihr Code schlägt daher fehl, wenn Sie die App über den Finder ausführen.

Sie sollten entweder den Benutzer wählen lassen, wo die Datei zu schreiben ist, mit einem NSSavePanel, oder Sie sollten die Datei in ein Verzeichnis schreiben, von dem Sie wissen, dass Sie Schreibzugriff haben, wie der Ordner Dokumente des Benutzers. Hier ist ein Code in den Ordner Dokumente zu schreiben:

NSURL *documentDirectoryUrl = [NSFileManager.defaultManager URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; 
NSURL *fileUrl = [documentDirectoryUrl URLByAppendingPathComponent:@"test.txt"]; 
NSString *someText = @"Hello world"; 
NSError *error; 
if (![someText writeToURL:fileUrl atomically:YES encoding:NSUTF8StringEncoding error:&error]) { 
    // Error occurred. Details are in the error object. 
} 
Verwandte Themen