iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath [英] iOS9 Swift File Creating NSFileManager.createDirectoryAtPath with NSURL

查看:155
本文介绍了iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在iOS9之前,我们已经创建了一个这样的目录

Before iOS9, we had created a directory like so

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)

但是在iOS9中,他们删除了String.stringByAppendingPathComponent.自动转换工具将我们对String的使用替换为NSURL. createDirectoryAtPath()需要一个字符串,因此我需要将NSURL转换为字符串.我们像这样使用absolutePath :(针对iOS9的更新)

But with iOS9 they removed String.stringByAppendingPathComponent. The auto convert tool replaced our use of String with NSURL. createDirectoryAtPath() takes a string so I need to convert the NSURL to a string. We used absolutePath like so: (update for 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)")
}

但是我遇到以下错误:

无法创建目录错误域= NSCocoaErrorDomain代码= 513 您无权将日志"文件保存在文件夹中 文档"." UserInfo = {NSFilePath = file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/, NSUnderlyingError = 0x15664d070 {Error Domain = NSPOSIXErrorDomain Code = 1 不允许操作"}}

Unable to create directory Error Domain=NSCocoaErrorDomain Code=513 "You don’t have permission to save the file "logs" in the folder "Documents"." UserInfo={NSFilePath=file:///var/mobile/Containers/Data/Application/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/, NSUnderlyingError=0x15664d070 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}

推荐答案

我想出了这一点. createDirectoryAtPath()无法处理带有"file://"前缀的路径.要获取不带前缀的路径,必须使用path()或relativePath().

I figured this one out. createDirectoryAtPath() is unable to process a path with the "file://" prefix. To get a path without the prefix you must use path() or 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)")
}

不正确的路径(注意文件://):

Incorrect path (notice file://):

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

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

正确的路径:

/var/mobile/容器/数据/应用程序/F2EF2D4F-94AF-4BF2-AF9E-D0ECBC8637E7/Documents/logs/

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

这篇关于iOS9 Swift文件使用NSURL创建NSFileManager.createDirectoryAtPath的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆