Я отправляю некоторые данные на свой сервер, и после ответа я отклоняю свой контроллер представления. В представлении viewControllerWillDisappear() я пытаюсь отклонить клавиатуру.Swift: проблема с Threading с помощью DismissViewController() и отключающей клавиатуры
Если текущий viewController viewer не является контроллером корневого представления, я получаю исключение "[UIKeyboardTaskQueue waitUntilAllTasksAreFinished] может вызываться только из основного потока. '". Я попытался вызвать функцию, которая отклонила клавиатуру, а затем viewcontroller (устраняя необходимость viewwilldisappear()), но у нее такая же проблема.
Код: // внутри представлены ViewController
override func viewWillDisappear(animated: Bool)
{
super.viewWillDisappear(animated)
self.view.endEditing(true)
}
Код: // в Presenter ViewController
func manage_response(//)
{
run_on_background_thread
{
self.parse(//)
run_on_main_thread
{
self.presented_controller.dismissViewControllerAnimated(true, completion: nil)
}
}
}
Все, что я видел уже указывает на это, как справиться с ситуацией. Проблема возникает только тогда, когда у меня отображается клавиатура, и я пытаюсь ее отклонить с помощью соответствующего диспетчера представлений.
Edit:
Синтаксис для задней функции метод я использую для нарезания резьбы:
func run_on_background_thread(code:() -> Void)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), code)
}
func run_on_main_thread(code:() -> Void)
{
dispatch_async(dispatch_get_main_queue(), code)
}
Решение:
Я отслеживал проблему вниз. Случай отличается от предыдущей мысли. Это происходит, когда я пытаюсь отобразить UIAlertController (через presentViewController), потому что запрос не возвращает правильные данные/учетные данные.
run_on_main_thread
{
if let controller = visibleViewController() //recursive
{
controller.view.endEditing(true)
controller.presentViewController(alert, animated: true, completion: nil)
}
}
Где указано run_on_background_thread и run_on_main_thread? –
Мой плохой. Они определяются глобально в файле вспомогательных/удобных функций. Включено сейчас. Примечание: они работают отлично в течение довольно сложного приложения, только когда клавиатура должна быть уволена, а что-то не так. – Ryan