簡體   English   中英

無法在調度隊列swift 3中的主線程中更新UI

[英]Can't update UI in main thread inside a dispatch queue swift 3

我正在使用Alamofire和SVProgressHUD來查詢API和處理數據。 問題是在調度隊列內部,即使我在主線程中更新了UI,更新的結果也將在調度隊列完成后得出。 我要做的是在進度條上顯示進度狀態,並不斷循環更新進度狀態(浮動)。 但是,只有在完成調度隊列中的所有操作后,該選項才會出現。 我的代碼如下所示。 干杯

DispatchQueue.global(qos: .userInitiated).async(execute: {
        Alamofire.request(queryURL).responseJSON() { response in
    //Do something
    for i in 0..<100{
        //Do lots of things
        DispatchQueue.main.async {
            SVProgressHUD.showProgress(Float(i/100), status: "Loading...")
        }
    }
 //Dismiss
})

試試下面的代碼:-

DispatchQueue.global(qos: .userInitiated).async(execute: {
    Alamofire.request(queryURL).responseJSON() { response in
    //Do something
    for i in 0..<100{
        //Do lots of things
        DispatchQueue.main.async {
            SVProgressHUD.showProgress(Float(i)/100 as Float, status: "Loading...")
        }
    }
 //Dismiss
})

它將顯示為...。

0.0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.2 0.21 0.22 0.23 0.24 0.25 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.4 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.5 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.75 0.76 0.77 0.78 0.79 0.8 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.9 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99

有兩種類型的線程。 您可以在此底部鏈接中找到更多信息。 UI僅在並發時有效

點擊此處鏈接以了解更多信息

Apple不允許在線程中更改ui控件。 因此,您必須在線程外更新ui。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM