当我选择“打印”菜单并取消它时,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是否被解雇?

我推这个示例应用程序上https://github.com/kunichiko/ios10-activity-bug

我也有类似的问题。在我的情况下,我注意到完成处理程序没有被调用,因为UIActivityController已经被解雇和解除分配。我所做的只是添加一个属性来保存一个强有力的参考,并将其设置为零。然后完成处理程序被正确调用。