当我选择“打印”菜单并取消它时,UIActivityViewController.completionWithItemsHandler不会在iOS 10.0上调用
问题描述:
我创建了一个简单的应用程序,其使用如下所示的UIActivityViewController
。当我选择“打印”菜单并取消它时,UIActivityViewController.completionWithItemsHandler不会在iOS 10.0上调用
let text = "Test Text"
let printData = UISimpleTextPrintFormatter(text: text)
let vc = UIActivityViewController(activityItems: [text, printData], applicationActivities: nil)
vc.completionWithItemsHandler = { (type,completed,items,error) in
print("completed. type=\(type) completed=\(completed) items=\(items) error=\(error)")
}
vc.modalPresentationStyle = .popover
vc.popoverPresentationController?.sourceView = self.openActivityButton
vc.popoverPresentationController?.sourceRect = self.openActivityButton.bounds
vc.popoverPresentationController?.permittedArrowDirections = .up
vc.popoverPresentationController?.delegate = self
self.present(vc, animated: true) {() in
}
我在iOS 10(Xcode 8.0 beta 6)上运行这个应用程序。
- 当我关闭活动对话框时,调用
completionWithItemsHandler
。 - 当我选择“复制”活动时,调用
completionWithItemsHandler
。 - 当我选择“邮件”活动并取消它时,
completionWithItemsHandler
被调用。 - 但是,当我选择“打印”活动并取消它时,
completionWithItemsHandler
是而不是调用。发生在iOS上10
这种奇怪的行为,但不是发生在iOS9(处理程序被称为上iOS9)
这是iOS的10的错误吗?如果是这样,是否有任何解决方法来检测UIActivityController
是否被解雇?
答
我也有类似的问题。在我的情况下,我注意到完成处理程序没有被调用,因为UIActivityController已经被解雇和解除分配。我所做的只是添加一个属性来保存一个强有力的参考,并将其设置为零。然后完成处理程序被正确调用。