2016-03-02 49 views
0

我對編程還很陌生,有時它會以非常基本的概念來咬我。 我有一個活動指標在我的tableviewcontroller中定義爲Outlet。活動作爲全球財產的指標

@IBOutlet weak var activityIndicator: UIActivityIndicatorView! 

使用數據下載填充tableview的數據在具有下載功能的類中的單獨文件中完成。這些功能包括下載的完成處理程序。現在,如果我想在完成部分插入

activityIndicator.stopAnimating() 

然後我得到消息「使用未解析的標識符activityIndi​​cator」。我如何使acitivityIndi​​cator分別成爲全局屬性,我如何讓下載類/函數識別tableViewController中定義的activityIndi​​cator?我知道這對大多數人來說可能是一個愚蠢的問題,但我不知道如何解決這個問題。

回答

0

理想情況下,您不希望下載代碼「知道」activityIndi​​cator。當你的viewController調用下載時,你可以傳遞另一個完成處理程序。然後,當下載完成處理程序運行時,調用此新的完成處理程序。 viewController知道activityIndi​​cator,所以它可以停止它。東西(很粗略地)線沿線的:

// In ViewController 
    myThing.doTheDownload(completion: { 
     dispatch_async(dispatch_get_main_queue(), { 
      self.activityIndicator.stopAnimating() 
     }) 
    }) 

// In download code 
    func doTheDownload(completion completionHandler: (() -> Void)) { 
      download(completion: { 
       completionhandler() 
      }) 
    } 

注意activityIndi​​cator是一個UI元素,因此它的代碼必須在主線程上運行。

+0

只是另一個問題 - 如果我有一些下載功能與完成處理程序,我希望activityIndi​​cator只停止,如果它們都被下載? – kangarooChris

+0

他們都可以調用相同的完成處理程序,它會統計這些調用並在達到總量時停止該指標。唯一需要注意的是count必須是線程安全的,所以最簡單的方法是在主隊列上完成。 – Michael