在iOS

时间:2018-01-10 09:13:54

标签: ios iphone swift file-permissions

我在将图像文件保存/替换到我的应用中的Documents文件夹时遇到问题。

在AppDelegate中,我有两个属性:

let documentsDirectory: URL = { return FileManager().urls(for: .documentDirectory, in: .userDomainMask).first! }()
let defaultDirectory: URL = { return Bundle.main.bundleURL.appendingPathComponent("DefaultBlocks.bundle", isDirectory: true) }()

看起来路径有效,有日志输出:

  

[详细]申请(:didFinishLaunchingWithOptions :)>文档网址:   文件:/// VAR /移动/容器/数据/应用/ 6ED04DA7-077F-4AE2-AB74-2EED02932823 /文档/

     

[详细]申请(:didFinishLaunchingWithOptions :)>默认值URL:file:///var/containers/Bundle/Application/A11D6A4A-E108-483F-86EC-BBFA10E77F72/TheAwesomeApp.app/DefaultBlocks.bundle/

我的应用程序逻辑是:如果用户请求重新加载默认图像,则使用应用程序包中的参考副本替换Documents文件夹中的图像。

我尝试在代码中实现替换(从 didFinishLaunchingWithOptions 调用):

func ReloadDefaults() {
    let fileManager = FileManager.default

    do {
        let destDirURL = appDelegate.documentsDirectory
        let defaultURLs = Bundle.main.urls(forResourcesWithExtension: "png", subdirectory: "DefaultBlocks.bundle/_default_images_")

        for url in defaultURLs! {
            let destURL: URL = destDirURL.appendingPathComponent(url.lastPathComponent)
            log.verbose("Src URL: \(url)")
            log.verbose("Dest URL: \(destURL)")
            _ = try fileManager.replaceItemAt(destURL, withItemAt: url.absoluteURL)
        }
    }
    catch {
        log.error("File copy error: \(error.localizedDescription)")
    }
}
  

[详细] ReloadDefaults()> Src网址:image-512.png -   文件:///var/containers/Bundle/Application/A11D6A4A-E108-483F-86EC-BBFA10E77F72/TheAwesomeApp.app/DefaultBlocks.bundle/_default_images_/

     

[详细] ReloadDefaults()>目标网址:   文件:///var/mobile/Containers/Data/Application/6ED04DA7-077F-4AE2-AB74-2EED02932823/Documents/image-512.png

不幸的是我的 replaceItemAt 电话有错误:

  

[错误] ReloadDefaults()>文件复制错误:您没有权限   将文件“image-512.png”保存在“Documents”文件夹中。

我有最新版本的Xcode和iOS。

0 个答案:

没有答案