【发布时间】:2018-11-21 17:51:24
【问题描述】:
我的应用程序在从 iCloud 打开文件时崩溃。如果我使用 Document Picker 从我的应用程序中打开此文件,一切都很好。但是,如果我尝试从我的应用程序外部打开,例如从 iCloud 或 Safari 下载,它会崩溃。如果我从本地存储“我的 iphone”打开它,它也可以工作。这很有趣,因为一周前还不错:)
所以在 AppDelegate 中,我实现了以下方法:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {}
根据日志,发生崩溃是因为文件不存在。
file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/Desktop/twic1121.pgn
如果我从参数中打印 URL,这就是结果。我认为这意味着文件在那里。
但如果我这样做:print(fm.fileExists(atPath: url.path)) 那么这是 false。
所以很明显let dataFromFile = fm.contents(atPath: url.path)之后
这是nil。
我不知道这可能是什么问题。所以这里真正的问题是为什么这是 nil?
【问题讨论】:
-
先尝试在您的网址上调用
startAccessingSecurityScopedResource()。 (见developer.apple.com/documentation/foundation/nsurl/…) -
如果文件已下载到手机,此方法有效。因此,如果文件的右上角有一个小云图标,这不起作用,无论如何我比以前领先一步,所以谢谢!
-
对不起,我也不知道所有细节。尝试查看
FileManager方法startDownloadingUbiquitousItem(at:)和isUbiquitousItem(at:)。也可以尝试直接使用 URL 而不是获取路径。 -
这很有趣,因为如果我想打开一个尚未下载的文件,只有占位符图标在那里,如果我从文档选择器尝试这个,那么它会先下载然后打开.但是从应用程序外部,如果我点击它,它会立即打开(当然,此时文件不存在,只是它的图标)。我之前已经找到了这个 startDownloadingUbiquitousItem ,但我不明白为什么它没有任何回调?它只是开始下载,但我不知道它何时完成。感谢您的帮助,我真的很感激。