2

在我正在开发的 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 数据加载到 aUIImage并将此图像设置为项目

这是我用来展示 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?

4

0 回答 0