与this相关。
当我使用QLPreviewController
打开一个文件,并按下“共享”按钮时,控制台将打印以下日志:
无法确定文件是否为目录:错误域= NSCocoa错误域代码=260
[共享表]请求文件的默认共享模式失败URL:file:///用户/xxxxxx/库/开发人员/核心模拟器/设备/XXXXXX/数据/容器/数据/应用程序/XXXXXX/文档/xxxxxx.pdf
[ShareSheet]仅支持CKShare和SWY类型的加载选项。
[ShareSheet]提取以下URL的项目时出错:文件:///用户/xxxxxx/库/开发人员/核心模拟器/设备/XXXXXX/数据/容器/数据/应用程序/XXXXXX/文档/xxxxxx.pdf
[ShareSheet]加载文档的元数据时出错URL:file:///用户/xxxxxx/库/开发人员/核心模拟器/设备/XXXXXX/数据/容器/数据/应用程序/XXXXXX/文档/xxxxxx.pdf
但是,路径是正确的(在应用程序的“文稿”文件夹中),并且可以通过任何方式成功打开和共享文件:在我的文档、Gmail、AirDrop、Slack等上保存
那么,为什么所有这些错误?我相信下面的崩溃,我收到的Firebase Crashlytics可能有关:
- 必须使用指向现有文件的URL调用[UIDocumentPickerViewController initForExportingURLs:asCopy:]:错误域=NSCocoaErrorDomain代码=260用户信息(NSURL=文件:///var/移动设备/容器/数据/应用程序/应用程序ID/文档/文件. pdf,NSFilePath=/var/移动设备/容器/数据/应用程序/应用程序/文档/文件. pdf,(错误域=NSPOSIXErrorDomain代码=2“没有这样的文件或目录”))
因为我不会在应用程序的其他地方调用[UIDocumentPickerViewController initForExportingURLs:asCopy:]
。调用该方法的唯一方式是共享应用程序中的文件并将其存储在iPhone文件系统中。
1条答案
按热度按时间c0vxltue1#
原来问题是这样的。
当应用程序移到后台时,出于安全考虑,所有文件都被删除,并且在
AppDelegate
上调用了applicationDidEnterBackground(application:)
。我很困惑,因为当我从后台回来时,我正在使用
QLPreviewController
查看的文件仍然在那里,我没有意识到它被删除了。如何重现错误?
1.使用
QLPreviewController
可视化文件。1.将该文件保存到iPhone的本地文件中(这将称为
[UIDocumentPickerViewController initForExportingURLs:asCopy:]
)。1.将应用程序发送到后台(或任何其他删除文件的操作)。
1.回到前台,文件仍然打开,您可以看到它,但它不存在于预期的路径上,因为它已被删除。
1.再次尝试将该文件保存到iPhone的本地文件中(这将调用
[UIDocumentPickerViewController initForExportingURLs:asCopy:]
)。按照这些步骤操作将导致应用崩溃,因为我们第二次尝试导出文件时,即使文件在
QLPreviewController
上仍然打开并可见,它也不存在于预期路径中。溶液
当我们从后台返回时,从其URL重新下载文件(因为它在本地不再可用)。要做到这一点,请订阅
QLPreviewController
上的didBecomeActive
通知。