簡體   English   中英

呈現iCloud文件,而無需用戶從DocumentBrowser中選擇它

[英]Present an iCloud file without user picking it from the DocumentBrowser

我的應用程序首次啟動時,我需要加載一個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: 如何訪問iCloud Drive中的文件從我的iOS應用程序中? 這說

當用戶選擇應用程序沙箱之外的目標位置時,文檔選擇器將調用委托的documentPicker:didPickDocumentAtURL:方法。 系統將文檔的副本保存到指定的目標位置。 文檔選擇器提供副本的URL來指示成功; 但是,您的應用程序無權訪問此URL引用的文件。

所以我的問題是,如果它是一個iCloud文件,如何加載上一個打開的文件? documentBrowser可以訪問它,但是那是因為用戶已經選擇了屏幕上的文件,並且出於保護的原因我無法在代碼中模擬該文件? 預先感謝您的任何幫助!

文檔選擇器用於將文件復制到應用程序的沙盒中或從沙盒中復制出來。

如果文件存儲在通用iCloud驅動器中,而不是應用程序的私有iCloud容器中,則可以通過Ubiquity Url- https://developer.apple.com/documentation/foundation/filemanager/1411653-url訪問它們

您可以通過類似於url(for:.documentDirectory的方式)將相對路徑附加到普遍存在的url。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM