呈现 iCloud 文件,而无需用户从文档浏览器中选取它



我需要在应用程序首次启动时加载iCloud文件。我希望应用程序显示应用程序关闭时上次打开的文件,因此如果上次打开的文件是iCloud文件,这就是我遇到问题的地方。

首先让我声明,如果上次打开的文件在我的文档目录中而不是在iCloud中,那么我可以毫无问题地打开它。我不能只存储完整的 url 路径,因为我的应用程序的沙盒目录可能会在重新打开应用程序时更改,因此我将上次打开的文件相对于上次打开的文件的文档目录的路径附加到运行时的 documentDirectory 路径:

var myfolder: URL? {
get {
do {
let docsurl = try fileManager.url(for:.documentDirectory,
in: .userDomainMask, appropriateFor: nil, create: false)
return docsurl
} catch {
return nil
}
}
}

然后这个

if let lastOpenedFile = UserDefaults.standard.string(forKey: "lastOpenedFile") {
let lastOpenedFileURL = myfolder!.appendingPathComponent(lastOpenedFile)
print(lastOpenedFileURL.path)
if (FileManager.default.fileExists(atPath: lastOpenedFileURL.path)) {
documentBrowserViewController.presentDocument(at: lastOpenedFileURL)
}
}

(如果这是一种不好的方法,请告诉我!

现在回到主要问题。对于iCloud文件,保存URL是一个问题,但问题不是沙盒目录已更改,而是因为由于此处提到的内容,我无法访问该URL:如何从我的iOS应用程序中访问iCloud云盘中的文件?哪个说

文档选取器调用委托的 documentPicker:didPickDocumentAtURL: 方法,当用户选择一个 应用沙盒之外的目标。系统保存一份副本 您的文档到指定的目的地。文档选取器 提供副本的 URL 以指示成功;但是,你的应用确实如此 无权访问此 URL 引用的文件。

所以我的问题是,如果它是iCloud文件,我如何加载最后打开的文件?documentBrowser可以访问它,但这是否是因为用户在屏幕上选择了文件,并且出于保护原因我无法在代码中模拟该文件?提前感谢您的任何帮助!

文档选取器用于将文件复制到/复制出应用的沙盒和另一个沙盒。

如果文件储存在通用的 iCloud 云盘中,而不是 App 的专用 iCloud 容器中,您可以通过 Ubiquity Url - https://developer.apple.com/documentation/foundation/filemanager/1411653-url 访问它们

您可以采用类似于url(for:.documentDirectory的方式将相对路径附加到无处不在的 url

相关内容

最新更新