swift ios9 nsfilemanager

Archivo Swift iOS9 Creando NSFileManager.createDirectoryAtPath con NSURL



(2)

Me di cuenta de esto. createDirectoryAtPath () no puede procesar una ruta con el prefijo "file: //". Para obtener una ruta sin el prefijo, debe usar path () o relativePath ().

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]) let logsPath = documentsPath.URLByAppendingPathComponent("logs") do { try NSFileManager.defaultManager().createDirectoryAtPath(logsPath.path!, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { NSLog("Unable to create directory /(error.debugDescription)") }

Ruta incorrecta (archivo de aviso: //):

file: /// var / mobile / Containers / Data / Application / F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7 / Documents / logs /

Camino correcto

/ var / mobile / Containers / Data / Application / F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7 / Documents / logs /

Antes de iOS9, habíamos creado un directorio como tal

let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String let logsPath = documentsPath.stringByAppendingPathComponent("logs") let errorPointer = NSErrorPointer() NSFileManager.defaultManager().createDirectoryAtPath(logsPath, withIntermediateDirectories: true, attributes: nil, error: errorPointer)

Pero con iOS9 eliminaron String.stringByAppendingPathComponent. La herramienta de conversión automática reemplazó nuestro uso de String con NSURL. createDirectoryAtPath () toma una cadena, así que necesito convertir el NSURL en una cadena. Usamos absolutePath así: (actualización para iOS9)

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]) let logsPath = documentsPath.URLByAppendingPathComponent("logs") do { try NSFileManager.defaultManager().createDirectoryAtPath(logsPath.absoluteString, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { NSLog("Unable to create directory /(error.debugDescription)") }

Pero estoy recibiendo el siguiente error:

No se puede crear el dominio Error de directorio = NSCocoaErrorDomain Code = 513 "No tiene permiso para guardar el archivo" logs "en la carpeta" Documentos "." UserInfo = {NSFilePath = file: /// var / mobile / Containers / Data / Application / F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7 / Documents / logs /, NSUnderlyingError = 0x15664d070 {Error de dominio = NSPOSIXErrorDomain Code = 1 "") "}}


Swift 3

let documentsPath = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]) let logsPath = documentsPath.appendingPathComponent("logs") do { try FileManager.default.createDirectory(at: logsPath!, withIntermediateDirectories: true, attributes: nil) } catch let error as NSError { NSLog("Unable to create directory /(error.debugDescription)") }