【发布时间】:2018-03-13 14:04:14
【问题描述】:
我正在努力弄清楚如何在 iCloud 文件夹中重命名 UIDocument 子类的实例。我已尝试使用新 URL 保存文档……
func renameDocument(to name: String) {
let targetURL = document.fileURL.deletingLastPathComponent().appendingPathComponent(name)
.appendingPathExtension("<extension>")
document.save(to: targetURL, for: .forCreating) { success in
guard success else {
// This always fails
return
}
// Success
}
}
…但这失败了…
Error Domain=NSCocoaErrorDomain Code=513 "“<new-file-name>” couldn’t be moved because you don’t have permission to access “<folder>”."UserInfo={NSSourceFilePathErrorKey=/private/var/mobile/Containers/Data/Application/1A9ACC2B-81EF-4EC9-940E-1C129BDB1914/tmp/(A Document Being Saved By My App)/<new-file-name>, NSUserStringVariant=( Move ), NSDestinationFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/<folder>/<new-file-name>, NSFilePath=/private/var/mobile/Containers/Data/Application/1A9ACC2B-81EF-4EC9-940E-1C129BDB1914/tmp/(A Document Being Saved By My App)/<new-file-name>, NSUnderlyingError=0x1c4e54280 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
……而且只是一个简单的动作……
func renameDocument(to name: String) {
let targetURL = document.fileURL.deletingLastPathComponent().appendingPathComponent(name)
.appendingPathExtension("<extension>")
do {
try FileManager.default.moveItem(at: document.fileURL, to: targetURL)
} catch {
// This always fails
}
// Success
}
…失败了…
Error Domain=NSCocoaErrorDomain Code=513 "“<old-file-name>” couldn’t be moved because you don’t have permission to access “<folder>”." UserInfo={NSSourceFilePathErrorKey=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/<folder>/<old-file-name>, NSUserStringVariant=( Move ), NSDestinationFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/<folder>/<new-file-name>, NSFilePath=/private/var/mobile/Library/Mobile Documents/com~apple~CloudDocs/<folder>/<old-file-name>, NSUnderlyingError=0x1c4c4d8c0 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}}
这两种方法都适用于本地文件,重命名 iCloud 文件在 UIDocumentBrowserViewController 根视图控制器中也可以正常工作。
我的猜测是某处缺少一些权限,允许应用写入 iCloud 文件夹。
对于信息,info.plist 包含以下所有键......
LSSupportsOpeningDocumentsInPlaceNSExtensionFileProviderSupportsEnumerationUISupportsDocumentBrowser
【问题讨论】:
-
在您尝试重命名时文档是否打开?
-
打开还是关闭似乎没有任何区别。
-
看看developer.apple.com/documentation/foundation/filemanager/… 看看是否有帮助。我很确定一些普通的文件管理器方法在 iCloud 容器中不起作用(尽管 iOS 11 可能已经改变了一些东西……)
-
我会再看一遍。我以前的 iOS 10 版本使用该方法工作,但我的印象是 iOS 11 中的情况发生了变化,因为您可以将文件保存到任何位置,在这种情况下,您如何知道它是 iCloud 还是本地文件夹...或其他位置?
-
这可能是苹果错过的那些地方之一,假设任何重命名都会发生在他们闪亮的新文档浏览器中。我已经对浏览器进行了一些试验,但还不足以找到粗糙的边缘(除了需要让 info.plist 的东西完全正确地工作)。
标签: ios icloud ios11 uidocument