2017-01-18 2 views
0

В моем приложении у меня есть контроллер представления, который я представляю модально. В этом представлении контроллер имеет табличное представление. Всякий раз, когда пользователь делает выбор в представлении таблицы, я отклоняю контроллер представления.Отклонить modal view controller замерзает приложение раз в то время, swift 3

Проблема в том, что иногда диспетчер представлений не увольняется или увольняется после долгой задержки (5-7 секунд), даже если вызывается функция увольнения.

Вот мой код:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 
{ 
    if tableView == self.quarterTableView 
    { 
     self.delegate?.modalViewController(modalVC: self, dismissedWithValue:self.quarterPeriods[indexPath.row]) 
    } 
    else if tableView == self.monthTableView 
    { 
     self.delegate?.modalViewController(modalVC: self, dismissedWithValue: self.monthPeriods[indexPath.row]) 
    } 

    Print("didSelectRowAt dismiss") 

    self.dismiss(animated: true) { 
     Print("finished") 
    } 
} 

Любая помощь высоко ценится.

EDIT:

Я решил проблему с помощью:

DispatchQueue.main.async 
{ 
    self.dismiss(animated: true) { 
     DDLogDebug("finished") 
    } 
} 

Есть ли вред от этого?

+1

Eugene, вам не нужно называть его в основном блоке отправки, если только вы не вызываете увольнение из фоновой очереди (по какой-то причине неизвестно) Попробуйте распечатать Thread.isMainThread в исходном коде и посмотреть, что он говорит – Chris

ответ

1

пытаются использовать диспетчерский DispatchQueue

DispatchQueue.main.async(execute: { 

}) 
1

если вы хотите что-то в интерфейсе произойдет сразу же, выполнить его на основной очереди

DispatchQueue.main.async(execute: { 
    self.dismiss(animated: true) { 
    Print("finished") 
}) 
1

Никакого вреда. Вы просто позволяете основному потоку выполнять две задачи одновременно.

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