1

我正在尝试使用 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?

谢谢,巴特

4

4 回答 4

1

XMLParser.parse可以阻止用户界面。尝试在后台线程上执行此操作:

DispatchQueue.global(qos: .background).async {
    parser.parse()
}
于 2017-11-22T03:16:09.987 回答
1

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

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

    DispatchQueue.main.async(execute: {() -> Void in
        self.protocolTableView.reloadData()
        SVProgressHUD.dismiss()
    })
}
于 2017-11-22T05:35:21.477 回答
0
 DispatchQueue.main.async {
        self.protocolTableView.reloadData()
        }

在主线程中重新加载 tableView。

于 2017-11-22T04:25:05.670 回答
0

这是解决方案:

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

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

    SVProgressHUD.dismiss()
}

谢谢大家的帮助!!

于 2017-11-22T05:12:20.367 回答