2016-07-20 2 views
1

Ich versuche, ein benutzerdefiniertes Verzeichnis mit folgenden Ausschnitt erstellen, die ich im Wesentlichen aus einem funktionierenden Obj-C-Code für die gleiche App übersetzt.Erstellen von benutzerdefinierten Verzeichnis in iOS Swift 2.2

class func pathToConfigFolder() -> String { 
    let urls: [String] = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true) 
    let libraryPath: String = urls.last! 
    let configFolder: String = NSURL(fileURLWithPath: libraryPath).URLByAppendingPathComponent(".conf").absoluteString 

    var directory: ObjCBool = ObjCBool(true) 
    if !NSFileManager.defaultManager().fileExistsAtPath(configFolder, isDirectory: &directory) { 
     do { 
      try NSFileManager.defaultManager().createDirectoryAtPath(configFolder, withIntermediateDirectories: false, attributes: nil) 
     } catch let error { 
      print(" Error thrown... \(error)") 
     } 
    } 
    return configFolder 
} 

Aber der Code schlägt mit folgendem Fehler fehl.

Error thrown... Error Domain=NSCocoaErrorDomain Code=4 "The operation couldn’t be completed. (Cocoa error 4.)" UserInfo=0x17526f4c0 {NSFilePath=file:///var/mobile/Containers/Data/Application/44D90AEB-DD7A-4C8C-9AD0-2665147BAAEC/Library/conf, NSUnderlyingError=0x174054c40 "The operation couldn’t be completed. No such file or directory"} 

Ich habe beide versucht, auf dem Gerät und Simulator mit iOS 9.

EDIT Objective-C-Code

+ (NSString*) pathToConfigFolder 
{ 
    NSArray *urls = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, 
                 NSUserDomainMask, YES); 
    NSString *libraryPath = [urls lastObject]; 

    NSString *configFolder = [libraryPath stringByAppendingPathComponent:@".conf"]; 

    NSError *error = nil; 

    if (! [[NSFileManager defaultManager] fileExistsAtPath:configFolder]) { 

     [[NSFileManager defaultManager] createDirectoryAtPath:configFolder 
            withIntermediateDirectories:NO 
                attributes:nil 
                 error:&error]; 
    } 
    return configFolder; 
} 
+0

Fügen Sie den Obj-C-Code an, vielleicht können wir die Unterschiede erkennen. – facumedica

Antwort

1

Ihr Problem ist hier:

let libraryPath: String = urls.last! 
let configFolder: String = NSURL(fileURLWithPath: libraryPath).URLByAppendingPathComponent(".conf").absoluteString 

Die absoluteString metho d gibt die gesamte URL als Zeichenfolge zurück. Ihre configFolder lautet also file:///var/mobile/Containers/Data/Application/44D90AEB-DD7A-4C8C-9AD0-2665147BAAEC/Library/conf. Das heißt, es enthält die file:// und ist daher kein gültiger Dateipfad geeignet für die Verwendung mit den NSFileManager Methoden, mit denen Sie es verwenden.

Ändern Sie diese Zeilen wie folgt aussehen würde das Problem beheben:

let libraryPath: NSString = urls.last! 
let configFolder = libraryPath.stringByAppendingPathComponent(".conf") 

ich NSString hier bin mit, denn dort stringByAppendingPathComponent definiert ist.

+0

Wenn ich 'String' verwendet habe, beschwerte sich der Compiler, dass' stringByAppendingPathComponent' nicht existierte. –

+0

Der von mir gepostete Code verwendet keine URLs, er verwendet Dateipfade. Ich habe die Variable mit dem Namen "urls" alleine gelassen, weil es nicht relevant schien, sie zu ändern. –

+0

@LeoDabus bitte zögern Sie nicht, Ihre eigene Antwort auf diese Frage zu schreiben. –