Ale*_*hin 7 iphone file-permissions ios swift
我在将图像文件保存/替换到我的应用程序中的 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) }()
Run Code Online (Sandbox Code Playgroud)
看起来路径是有效的,有一个日志输出:
[详细] application(:didFinishLaunchingWithOptions:) > Docs URL:file:///var/mobile/Containers/Data/Application/6ED04DA7-077F-4AE2-AB74-2EED02932823/Documents/
[详细] application(:didFinishLaunchingWithOptions:) > Defaults 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)")
}
}
Run Code Online (Sandbox Code Playgroud)
[详细] ReloadDefaults() > Src URL: image-512.png -- file:///var/containers/Bundle/Application/A11D6A4A-E108-483F-86EC-BBFA10E77F72/TheAwesomeApp.app/DefaultBlocks.bundle/_default_images_/
[详细] ReloadDefaults() > 目标 URL:file:///var/mobile/Containers/Data/Application/6ED04DA7-077F-4AE2-AB74-2EED02932823/Documents/image-512.png
不幸的是,我在replaceItemAt调用中遇到了错误:
[错误] ReloadDefaults() > 文件复制错误:您无权将文件“image-512.png”保存在“Documents”文件夹中。
我有最新版本的 Xcode 和 iOS。
| 归档时间: |
|
| 查看次数: |
6480 次 |
| 最近记录: |