SVProgressHUD 在显示 UITableView 之前不显示

SVProgressHUD not displaying until UITableView is displayed

我正在尝试使用 SVProgressHUD 来指示应用正忙。

我现在的代码是:

        SVProgressHUD.show()
        DispatchQueue.global(qos: .background).async {
            parser.parse()
            print("start reloading")
            self.protocolTableView.reloadData()

            print("end reloading")
            SVProgressHUD.dismiss()
        }

我收到此警告:

UITableView.reloadData() must be used from main thread only

并且在解析完成后,tableView显示需要一段时间

从主线程读取解析后如何更新tableView?

谢谢, 巴特

XMLParser.parse可以挡住UI。尝试在后台线程上执行此操作:

DispatchQueue.global(qos: .background).async {
    parser.parse()
}
 DispatchQueue.main.async {
        self.protocolTableView.reloadData()
        }

在主线程中重新加载 tableView。

这是解决方案:

SVProgressHUD.show()
DispatchQueue.global(qos: .background).async {
    parser.parse()

    DispatchQueue.main.sync {
        self.protocolTableView.reloadData()
    }

    SVProgressHUD.dismiss()
}

感谢大家的帮助!!

UI 更新应该在主线程中完成:

SVProgressHUD.show()
DispatchQueue.global(qos: .background).async {
    parser.parse()
    print("start reloading")

    DispatchQueue.main.async(execute: {() -> Void in
        self.protocolTableView.reloadData()
        SVProgressHUD.dismiss()
    })
}