在我正在开发的 iPad 应用程序中,我正在生成应该使用UIDocumentInteractionController
.
每个选项都很好,但只有一个。如果 png 文件大于 20MB 左右,则 AirDrop 功能会失败,并且UIDocumentInteractionController
弹出窗口会被 iOS 终止并出现错误:
viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}
该应用程序继续运行,我仍然可以使用它。
在这种 png 文件很大的情况下,所有其他“共享/打开方式...”选项都可以正常工作。只有 AirDrop 共享功能失败。
它几乎在点击要分享的人/设备后立即发生。因此,它不觉得它可能是一个内存问题。我也不相信这一点,因为我正在开发具有 6GB RAM 的 2018 iPad Pro。
在我的测试中,大多数生成的文件都在 100MB 左右,与我们使用 AirDrop 从 Apple 应用程序传输的文件相比,这并不算大。Files
例如,我使用 AirDrop从应用程序传输了大于 300MB 的文件。
请注意,我不知道正确的限制值,但我感觉(!)它在 20MB 区域内。我已经尝试过使用重量高达 10MB 的文件,没有任何问题。
我也尝试过使用UIActivityViewController
并得到了相同的行为。我已经尝试了三种设置要共享的项目的方法:
- 将 png 文件 url 设置为项目
- 将 png 数据加载到
Data
对象中并将该数据对象设置为项目 - 将 png 数据加载到 a
UIImage
并将此图像设置为项目
这是我用来展示 documentController 的代码:
func presentDocumentInteractionController(for fileUrl: URL) {
documentController = UIDocumentInteractionController(url: fileUrl)
documentController!.delegate = self
documentController!.uti = String(kUTTypePNG)
documentController!.name = fileUrl.lastPathComponent
documentController!.presentOptionsMenu(from: shareBarButtonItem, animated: true)
}
The documentController
var is a member of my class to avoid it to be deleted when the function ends and then avoid the app to crash on nil value.
I have no idea other than filing a Radar to Apple. Anybody has experienced this kind of behaviour?