取消打印活动后,应用程序崩溃



我的应用程序支持打印。如果用户取消打印机选项模态控制器,则该应用在Apple代码中崩溃,并带有_WebTryThreadLock(bool) ... Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

的消息

我将其范围缩小到以下代码:

let itemProvider = UIActivityItemProvider(placeholderItem: "message")
let activityItems = [ itemProvider,
                      UIMarkupTextPrintFormatter(markupText: "test") ]
let activityController = UIActivityViewController(activityItems: activityItems,
                                              applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)

如果我从activityItems数组中删除itemProvider,则崩溃会消失。在我的应用程序中,我有一个UIActivityItemProvider的自定义子类,但是即使我在不自定义的情况下使用超类,我也会崩溃。

要复制,使用一个按钮创建一个单视图项目,然后将按钮链接到使用上方代码片段作为其主体的操作。然后点击按钮,点击"活动视图控制器"中的打印图标,然后点击打印机选项视图控制器中的"取消"按钮。碰撞。有什么想法吗?

它几乎可以肯定是Apple代码中的错误。

调试后,我得出的结论是,它与 UIMarkupTextPrintFormatter实例的交易有关。

作为解决方法,您可以将格式化器作为班级中的属性:

var printFormatter = UIMarkupTextPrintFormatter(markupText: "test")

然后这样使用:

let itemProvider = UIActivityItemProvider(placeholderItem: "message")
let activityItems = [itemProvider, self.printFormatter]
let activityController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)

只要您的实例强烈持有该属性,并且不会被交易,它不会崩溃。

最新更新