取消打印后应用程序崩溃 Activity
App Crashes After Canceling Print Activity
我的应用程序支持打印。如果用户取消打印机选项模态视图控制器,应用程序会在 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
的自定义子类,但即使我在没有自定义的情况下使用超类,我也会遇到此崩溃。
要复制,请创建一个带有单个按钮的单视图项目,然后 link 将按钮指向一个使用上面的代码片段作为其主体的操作。然后点击按钮,点击 activity 视图控制器中的打印图标,然后点击打印机选项视图控制器中的取消按钮。碰撞。有什么想法吗?
这几乎可以肯定是 Apple 代码中的错误。
经过调试,我得出的结论是与UIMarkupTextPrintFormatter
实例的释放有关。
因此,作为解决方法,您可以在 class:
中将格式化程序设置为 属性
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)
只要 属性 被您的实例强烈持有并且没有被释放,它就不会崩溃。
我的应用程序支持打印。如果用户取消打印机选项模态视图控制器,应用程序会在 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
的自定义子类,但即使我在没有自定义的情况下使用超类,我也会遇到此崩溃。
要复制,请创建一个带有单个按钮的单视图项目,然后 link 将按钮指向一个使用上面的代码片段作为其主体的操作。然后点击按钮,点击 activity 视图控制器中的打印图标,然后点击打印机选项视图控制器中的取消按钮。碰撞。有什么想法吗?
这几乎可以肯定是 Apple 代码中的错误。
经过调试,我得出的结论是与UIMarkupTextPrintFormatter
实例的释放有关。
因此,作为解决方法,您可以在 class:
中将格式化程序设置为 属性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)
只要 属性 被您的实例强烈持有并且没有被释放,它就不会崩溃。