2016-07-20 4 views
1

Я пытаюсь создать пользовательский каталог с использованием следующего фрагмента, который я по существу перевел из рабочего кода Obj-C для того же приложения.Создание пользовательского каталога в 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 
} 

Но код не соответствует следующей ошибке.

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"} 

Я попытался как на устройстве и тренажерных работает прошивкой 9.

EDIT Objective-C код

+ (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

Прикрепите код Obj-C, возможно, мы сможем определить различия. – facumedica

ответ

1

Ваша проблема здесь:

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

Метод absoluteString d возвращает весь URL как строку, поэтому ваш configFolder - file:///var/mobile/Containers/Data/Application/44D90AEB-DD7A-4C8C-9AD0-2665147BAAEC/Library/conf. То есть, он содержитfile:// и поэтому не является допустимым файловым путем, подходящим для использования с методами NSFileManager, с которыми вы его используете.

Изменение этих строк, чтобы посмотреть, как это будет решить эту проблему:

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

Я использую NSString здесь, потому что там stringByAppendingPathComponent определяется.

+0

Когда я использовал 'String', компилятор жаловался, что' stringByAppendingPathComponent' не существует. –

+0

Код, который я разместил, не использует URL-адреса, он использует пути к файлам. Я оставил только что названную переменную «urls», потому что ее изменение не показалось актуальным. –

+0

@LeoDabus, пожалуйста, не стесняйтесь написать свой собственный ответ на этот вопрос. –

Смежные вопросы