2016-08-19 2 views
4

Я создал простое приложение, которое использует 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 is не.

Это странное поведение произошло прошивки 10, но не произошло iOS9 (обработчик был вызван iOS9)

ли ошибка этого IOS 10-ой? Если да, существуют ли какие-либо обходные пути для обнаружения UIActivityController?

Я оттолкнул этот пример приложения на https://github.com/kunichiko/ios10-activity-bug

ответ

3

У меня была аналогичная проблема. В моем случае я заметил, что обработчик завершения не был вызван, потому что UIActivityController уже был уволен и освобожден. То, что я сделал, это просто добавить свойство, чтобы провести сильную ссылку и установить его позже. Затем обработчик завершения был вызван должным образом.

Смежные вопросы