Ste*_*dle 3 ios swift uiactivityitemprovider
我的应用支持打印.如果用户取消打印机选项模式视图控制器,则应用程序会在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)
Run Code Online (Sandbox Code Playgroud)
如果我itemProvider
从activityItems
阵列中删除,崩溃就会消失.在我的应用程序中,我有一个自定义子类UIActivityItemProvider
,但即使我使用超类而没有自定义它,我得到了这个崩溃.
要复制,请使用单个按钮创建单视图项目,并将该按钮链接到使用上面的代码片段作为其主体的操作.然后点击按钮,点击活动视图控制器中的"打印"图标,然后点击"打印机选项"视图控制器中的"取消"按钮.崩溃.有任何想法吗?
小智 5
这几乎肯定是Apple代码中的一个错误.
经过调试,我得出结论,它与UIMarkupTextPrintFormatter
实例的释放有关.
因此,作为一种解决方法,您可以将格式化程序作为类中的属性:
var printFormatter = UIMarkupTextPrintFormatter(markupText: "test")
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
let itemProvider = UIActivityItemProvider(placeholderItem: "message")
let activityItems = [itemProvider, self.printFormatter]
let activityController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
只要该属性由您的实例强烈保留并且未被释放,它就不会崩溃.
归档时间: |
|
查看次数: |
308 次 |
最近记录: |