TableView DidSelectRowAt() 延迟

TableView DidSelectRowAt() latency

您好,我实际上在我的应用程序中使用了 tableview。我有从 VC 切换到 mother 的这行代码,它在任何地方都可以正常工作:

 let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
self.present(vue, animated: true, completion: nil)

在我的 tableView 中,我使用函数 DidSelectRowAt(当我点击 row/cell 时执行)来执行此操作(切换 VC) 但是你已经明白当我点击它时它工作但有延迟。 这种延迟有时可以是 1-2 秒,有时可以达到 12 秒,这是随机的。这很奇怪。 我指定上面的功能可以立即与按钮和其他功能一起使用。 这是代码(我只写重要的东西):

class Horaire: ViewController, UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
        self.present(vue, animated: true, completion: nil)

}

和另一个 class :

class Accueil: ViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        print("viewDidLoad executed")
    }
}

所以当我点击我的表格视图的一个单元格时,它会立即打印 "viewDidLoad executed" 但 VC 切换仅在随机的几秒钟后完成。 为什么我有这种延迟以及如何解决它?它不使用 segue

我第一个想到的就是把block放到主队列中。我知道 didSelectRowAt 应该在 UI 线程中 运行,但我在互联网上看到一些关于这件事的抱怨。在我看来像是一个错误。

class Horaire: ViewController, UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        DispatchQueue.main.async{
        let vue = MAINSTORYBOARD.instantiateViewController(withIdentifier: "accueil") as! Accueil
        self.present(vue, animated: true, completion: nil)
        }
    }
}

出于某种奇怪的原因,您会发现这似乎对这些人有效: https://github.com/HeroTransitions/Hero/issues/79