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

问题描述 投票:1回答:1

我已经使用UIDocumentBrowserViewController开发了一个基于文档的iOS应用(它是一个游戏)。在启动应用程序时,我想自动重新打开上次使用的UIDocument。为此,我将创建或打开的UIDocument的url字符串存储在用户默认值中,然后尝试在viewDidLoadDocumentBrowserViewController上打开它。这对于本地存储中的文档工作正常,但在iCloud(或其他一些外部)存储的文档上则失败。

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

/ private / var / mobile /容器/数据/应用程序/F4AF5E0B-C261-47F5-95ED-0B8A1DFEEDE6/Documents/Emsave.emp

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

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

我的DocumentBrowserViewController的viewDidLoad:

    override func viewDidLoad() {
        super.viewDidLoad()

        delegate = self

        allowsDocumentCreation = true
        allowsPickingMultipleItems = false

        // Do any additional setup after loading the view, typically from a nib.
                                                                // did we already open a game before?
        if let url = UserDefaults.standard.string(forKey: DocumentBrowserViewController.lastGameKey) {
            print("last opened game: \(url)")
            if FileManager.default.fileExists(atPath: url) {    // and is the game still existing?
                presentDocument(at: URL(fileURLWithPath: url))  // open it
            }
        }
    }

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

ios swift url uidocumentbrowservc
1个回答
0
投票

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

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

请看本节:书签和安全范围在https://developer.apple.com/documentation/foundation/nsurl?language=objc

© www.soinside.com 2019 - 2024. All rights reserved.