Размотать Segue и Mutl-Threading - PullRequest
0 голосов
/ 05 июня 2018

Контроллер представления запускается модально из родительского контроллера представления, а затем раскручивается к его родительскому элементу, если нажата одна из трех кнопок:

@IBAction func parentSelected(_ sender: UIButton) {
    switch sender.tag {
    case 1:
        parentType = ParentStoryboardId.meetings
    case 2:
        parentType = ParentStoryboardId.accounts
    case 3:
        parentType = ParentStoryboardId.contacts
    default:
        parentType = ParentStoryboardId.accounts
    }
    self.performSegue(withIdentifier: "unwindToNotes", sender: self)
}

Затем обработчик перехода раскрутки в родительском VC запускает другой VC из таблицы.со списком записей:

@IBAction func unwindToNotes(sender: UIStoryboardSegue) {
     if let sourceViewController = sender.source as? SelectParentVC {
         DispatchQueue.main.async {
            guard let parentType = sourceViewController.parentType 
             else {
                return
             }
            self.parentSelected = parentType
            self.displayParents(parentType)
            self.selectParentView.isHidden = true
          }
     }
 }

Первоначально я не указывал основную очередь при выполнении всех операций пользовательского интерфейса, вызываемых обработчиком sewwind в родительском VC.И представление списка, которое я пытался вызвать, не отображалось, хотя отладка подтвердила, что VC списка выполнялся частично.

Кажется, что некоторые операции пользовательского интерфейса, вызванные из обработчика sewind unwind, были перенесены в фоновый поток.Я пытаюсь выяснить, как это произошло, поскольку ни одна из операций, ведущих к операциям «размотки», явно не выполнялась в фоновом потоке.Любые идеи или ссылки будут высоко оценены!

1 Ответ

0 голосов
/ 06 июня 2018

Ваша проблема не в том, что вы не работали в главной очереди.Ваша проблема заключалась в том, что вы пытались представить новый контроллер представления, пока он находился в процессе увольнения.

Используя DispatchQueue.main.async, вы вызываете представление контроллера представления на следующей итерации.основного цикла выполнения после того, как предыдущий контроллер представления был отклонен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...