2017-07-27 29 views
0

我是IOS新手,很快。我在顯示活動指標時遇到問題。如何顯示活動指示器視圖,直到函數完全執行?

// In the controller 
DispatchQueue.global(qos: .background).async { 
     DispatchQueue.main.async { 
      self.activityIndicator.startAnimating() 

     } 

     Sync.performSync() 
     DispatchQueue.main.async { 
      self.activityIndicator.stopAnimating() 

     } 

    } 


class Sync { 
    static func performSync() { 
    User.performUserSync() 
    ItemBarcode.performIbSync() 
    // few more sync functions 
    } 
} 

class User { 
    static func performUserSync(){ 
     Alamofire.request("\(baseUrl)/api/users", method: .get, headers: 
     headers).responseJSON { response in 
     // Fetch code and insert to database 
     } 
    } 
} 

問題是活動指示器視圖剛剛出現並在1-2秒後消失。但是我希望顯示它,直到執行完整的Sync.performSync()函數,這需要一些時間。我該如何編碼?

回答

2

您遇到此問題是因爲您在performUserSync中執行的網絡請求是異步請求,因此performUserSync也成爲異步函數,這意味着它在它完成執行之前返回。

您有幾種方法來解決這個問題:

  1. 只有調用activityIndicator.stopAnimating()performUserSyncAlamofire請求的完成處理程序中。
  2. 更改performUserSync並調用它的所有函數返回完成處理程序並停止返回的完成處理程序中的活動指示符。
  3. 使用框架(如PromiseKit)來處理異常函數,如具有返回值的普通函數。
相關問題