ios - 写入应用程序支持目录时出错

标签 ios swift tvos nsfilemanager

我在这里看到这个问题被问了十几次,但解决方案似乎并不能解决我的情况。

我有一些内容需要存储在“应用程序支持”目录中,但尝试在那里写入时仍然收到错误。

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/

相关文章:

ios - 在 Documents 目录中加载下载的图像(IOS 10、xcode 8.1、Swift 3.0)

ios - '一个 AVPlayerItem 不能与多个 AVPlayer 实例相关联'

javascript - 从 Java 脚本 (TVML) 调用带有完成处理程序的 Swift 函数

ios - DYLD,没有名称的缓存图像(@rpath/libswiftCore.dylib)

video-streaming - 如何在没有 VideoToolbox 的情况下访问 tvOS 上的硬件解码?

ios - 在 UIView 外部添加边框(而不是在内部)

ios - 将图像显示为弹出窗口

ios - iPhone 呈现与桌面浏览器不同的 HTML 表单

objective-c - 为什么没有对应ivar 的子类@property 会隐藏父类(super class)ivar?

ios - 如何知道 iOS 中是否显示了位置服务对话框?