我在这里看到这个问题被问了十几次,但解决方案似乎并不能解决我的情况。
我有一些内容需要存储在“应用程序支持”目录中,但尝试在那里写入时仍然收到错误。
func assetFilesDirectory(asset: Asset, shouldCreate: Bool) -> URL? {
do {
let applicationSupportFolderURL = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let folder = applicationSupportFolderURL.appendingPathComponent("\(asset)")
if !FileManager.default.fileExists(atPath: folder.path) {
if shouldCreate {
try FileManager.default.createDirectory(at: folder, withIntermediateDirectories: true, attributes: nil)
} else {
return nil
}
}
return folder
} catch {
print(error)
return nil
}
}
当此代码运行时,我不断收到以下错误:
"You don’t have permission to save the file “asset-backgrounds” in the folder “Application Support”."
我尝试在下一行中切换 create 参数的值,但我也遇到了同样的错误,只需引用 Application Support 目录并图书馆改为。
let applicationSupportFolderURL = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
我还没有看到任何理由说明这会对 API 产生任何影响,但作为信息,我正在 tvOS 平台(物理设备)上运行此代码。不过,没有信息表明应用程序支持应该在 tvOS 上受到权限限制。
最佳答案
我用一个字符串替换了你的 Assets (无论是什么),它工作得很好:
func assetFilesDirectory(name: String, shouldCreate: Bool) -> URL? {
do {
let applicationSupportFolderURL = try FileManager.default.url(for: .applicationSupportDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let folder = applicationSupportFolderURL.appendingPathComponent(name)
if !FileManager.default.fileExists(atPath: folder.path) {
if shouldCreate {
try FileManager.default.createDirectory(at: folder, withIntermediateDirectories: true, attributes: nil)
print("ok")
} else {
return nil
}
}
return folder
} catch {
print(error)
return nil
}
}
我打电话了
let url = self.assetFilesDirectory(name: "test", shouldCreate: true)
print(url)
我得到了“ok”
和URL file:///blahblahblah/Library/Application%20Support/test
,这正是人们所期望的。
关于ios - 写入应用程序支持目录时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279940/