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

时间:2016-08-19 06:01:57

标签: 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
    }

我在iOS 10(Xcode 8.0 beta 6)上运行此应用程序。

  • 当我关闭活动对话框时,会调用completionWithItemsHandler
  • 当我选择"复制"活动,completionWithItemsHandler被调用。
  • 当我选择" Mail"活动并取消它,completionWithItemsHandler被调用。
  • 但是,当我选择"打印" 活动并取消它时,completionWithItemsHandler 被调用。

这种奇怪的行为发生在iOS 10上,但没有发生在iOS9上(处理程序是在iOS9上调用的)

这是iOS 10的错误吗?如果是,是否有任何变通方法可以检测UIActivityController被解雇?

我在https://github.com/kunichiko/ios10-activity-bug

上推送了此示例应用

1 个答案:

答案 0 :(得分:6)

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