我使用“ globalQueue.async”从服务器接收数据,然后使用结果更新UI。我几乎是在发出请求的同一秒从服务器接收到所需的数据的,我知道这一点,因为我是通过代码在XCode中打印数据的。但是问题在于,UI中的UILabel至少在8秒后就会更新。
我了解我正在尝试在主线程上更新侧线程数据,但是我采用了这种方法,因为UI在从服务器获取数据时冻结了(在尝试从服务器获取数据的过程中以及当数据获取数据时,任何操作均无效接收到它会显示数据并启用UI),当我使用“ DispatchQueue.main.async”时会发生这种情况,所以我决定使用“ globalQueue.async”,因为它不会冻结UI,但我面临“ globalQueue.async”问题因为它很晚才更新UI上的数据,有时即使在数据以XCode打印时也无法更新UI上的数据。
我迷路了,我尝试了好几天,头痛不已,我想不出一种方法来实现我的目标,即从服务器获取数据并更新UI,而又不会冻结UI。
请帮助。
这是ViewController.swift代码:
try! myobj.createData(request: request, with: { stringReturn in
print("" + stringReturn.result)
self.displayTextArea.text = stringReturn.result// displayTextArea is UILabel field
})
答案 0 :(得分:1)
每个UI更新都必须在主线程中完成 试试这个...
try! myobj.createData(request: request, with: { stringReturn in
print("" + stringReturn.result)
DispatchQueue.main.async {
self.displayTextArea.text = stringReturn.result// displayTextArea is UILabel field
}
})