Ios 如何使用UIDocumentBrowserViewController在iCloud上重新打开UIDocument

Ios 如何使用UIDocumentBrowserViewController在iCloud上重新打开UIDocument,ios,swift,url,uidocumentbrowservc,Ios,Swift,Url,Uidocumentbrowservc,我已经开发了一个基于文档的iOS应用程序,使用的是UIDocumentBrowserViewController(这是一个游戏)。启动应用程序时,我想自动重新打开上次使用的ui文档。为此,我将创建或打开的UIDocument的url字符串存储在用户默认设置中,并尝试在我的DocumentBrowserViewController的viewDidLoad上打开它。这对于本地存储的文档很好,但对于iCloud(或其他一些外部)存储的文档则不起作用 本地存储文档的url字符串如下所示: /私有/var

我已经开发了一个基于文档的iOS应用程序,使用的是
UIDocumentBrowserViewController
(这是一个游戏)。启动应用程序时,我想自动重新打开上次使用的
ui文档。为此,我将创建或打开的
UIDocument
的url字符串存储在用户默认设置中,并尝试在我的
DocumentBrowserViewController
viewDidLoad
上打开它。这对于本地存储的文档很好,但对于iCloud(或其他一些外部)存储的文档则不起作用

本地存储文档的url字符串如下所示:

/私有/var/mobile/Containers/Data/Application/F4AF5E0B-C261-47F5-95ED-0B8A1DFEEDE6/Documents/Emsave.emp

某些云服务上的同一文档具有以下url字符串:

/private/var/mobile/Containers/Shared/AppGroup/83CB33FC-5A87-404F-BFB9-8F2910A2192E/文件 提供程序存储/485172592867551584/Emsave.emp

“我的文档浏览服务”控制器的viewDidLoad:

override func viewDidLoad(){
super.viewDidLoad()
代表=自我
allowsDocumentCreation=true
allowsPickingMultipleItems=false
//加载视图后,通常从nib执行任何其他设置。
//我们以前开过游戏吗?
如果让url=UserDefaults.standard.string(forKey:DocumentBrowserViewController.lastGameKey){
打印(“上次打开的游戏:\(url)”)
如果FileManager.default.fileExists(atPath:url){//,那么游戏仍然存在吗?
presentDocument(位于:URL(fileURLWithPath:URL))//打开它
}
}
}

如果url字符串指定一个存储在云服务上的文档,则test FileManager.default.fileExists(atPath:url)似乎总是返回false,尽管它在云服务上。

您不应该保留从DocumentPicker或DocumentBrowser获得的url,因为该文件可能已经移动,在应用程序关闭时被重命名

您应该从url保存书签,并在下次需要时从书签重新创建url

看看这一部分:书签和安全范围

中,非常感谢您的提示,但这并没有真正解决问题。如果URL指向外部存储(如iCloud),则无法创建书签。在iOS上,如本讨论所述,
securityscope
书签创建选项不可用[并且权限
com.apple.security.files.bookmarks.app scope
在iOS上似乎无效。您是否尝试将书签创建包含在[url startAccessingSecurityScopedResource]和[url startAccessingSecurityScopedResource]之间[url stopAccessingSecurityScopedResourde]?是的,丢失了。非常感谢;现在一切都好了。