Мое приложение поддерживает печать. Если пользователь отменяет опцию принтера модального контроллера представления, приложение падает где-то в коде Apple, с сообщением _WebTryThreadLock(bool) ... Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...
Сбой приложений после отмены операции печати
Я сузил на следующий код:
let itemProvider = UIActivityItemProvider(placeholderItem: "message")
let activityItems = [ itemProvider,
UIMarkupTextPrintFormatter(markupText: "test") ]
let activityController = UIActivityViewController(activityItems: activityItems,
applicationActivities: nil)
self.present(activityController, animated: true, completion: nil)
Если удалить itemProvider
из массив activityItems
, авария уходит. В моем приложении у меня есть собственный подкласс UIActivityItemProvider
, но даже если я использую суперкласс без его настройки, я получаю этот сбой.
Чтобы воспроизвести, создайте проект одного вида с помощью одной кнопки и привяжите кнопку к действию, которое использует фрагмент кода выше как его тело. Затем нажмите кнопку, коснитесь значка «Печать» в контроллере вида деятельности, а затем нажмите кнопку «Отмена» в диспетчере просмотра параметров принтера. Краш. Есть идеи?
Следуя инструкциям в Xcode 8.1, с целью iPhone и запуском на устройстве 9.3.5, я не вижу сбоя. –
Спасибо, что проверил это, Филипп. Я использую Xcode 8.1 с симулятором iPhone 7, цель развертывания установлена в 10.1. Когда я меняю это на 9,3, я все равно получаю крах в симуляторе каждый раз. Я пробовал на своем устройстве (iPhone 6 Plus работает 10.1.1), и авария не всегда происходит - это прерывисто. Если я установил цель развертывания в 10.1, мое устройство каждый раз рушится, но если я установил цель развертывания в 9.3, это не всегда произойдет. В моем приложении для доставки пользователи столкнулись с этим сбоем на iPhones и iPads, работающих под управлением 10.1.1. Возможно, это ошибка iOS, и мне нужно подать радар. –
У меня нет хороших идей, но я нашел одно странное наблюдение. Если я назначу обработчик завершения ('UIActivityViewControllerCompletionWithItemsHandler') для контроллера активности, он перестанет сбой в симуляторе ** в первый раз через последовательность **. Но, если я повторяю действия пользовательского интерфейса без перезапуска ... сбоя. –