Получение «Error Domain = NSCocoaErrorDomain Code = 257» в приложении на основе документов при попытке восстановления состояния - PullRequest
0 голосов
/ 28 октября 2019

Полное сообщение об ошибке:

[main] *** Ошибка из FPBookmarkableStringFromDocumentURL, файл: /// private / var / mobile / Library / Mobile% 20Documents / com ~ apple ~ CloudDocs /MY_APP / hello.txt -> Error Domain = NSCocoaErrorDomain Code = 257 "Файл не может быть открыт, потому что у вас нет разрешения на его просмотр."

Эта ошибка возникла из SceneDelegate(введено в iOS 13), когда я перезапускаю свое приложение и пытаюсь снова открыть ранее открытый файл (например, когда приложение было «фоновым» и память освобождается, поэтому я хочу перезагрузить состояние сцены). Я выполнил шаги этого сеанса WWDC https://developer.apple.com/videos/play/wwdc2019/212 и загруженный пример исходного кода из https://developer.apple.com/documentation/uikit/app_and_environment/scenes/supporting_multiple_windows_on_ipad

Я в основном скопировал их конфигурацию (window: UIWindow ?, с Activity: NSUserActivity) -> Bool functionи преобразовал это, чтобы соответствовать моим потребностям. Кажется, работает безупречно, но я получаю сообщение об ошибке.

Я использую стандартную технику NSUserActivity, описанную в разделе «Принятие передачи обслуживания в приложениях на основе документов» https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/Handoff/AdoptingHandoff/AdoptingHandoff.html#//apple_ref/doc/uid/TP40014338-CH2-SW17

Вот тело функции настройки:

if activity.activityType == "com.myName.MyApp.openedDocumentUserActivity" {

            if let documentURL = activity.userInfo?[UIDocument.userActivityURLKey] as? URL {

                if let docBrowserVC = window?.rootViewController as? DocumentBrowserViewController {
                    documentURL.startAccessingSecurityScopedResource() // tried this, it returns false
                    docBrowserVC.presentDocument(at: documentURL)
                    return true
                }
            }
        }
        return false

Если кто-нибудь знает об обходном пути, спасибо.

...