当我选择"打印"菜单并取消它时,在iOS 10.0上不调用UIActivityViewController.completionWithItemsHandler

kun*_*iko 6 uiactivityviewcontroller ios10 xcode8

我创建了一个简单的应用程序,使用UIActivityViewController如下.

    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
    }
Run Code Online (Sandbox Code Playgroud)

我在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上推了这个示例应用程序

小智 6

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