2015-07-13 40 views
0

當我按下一個按鈕時,我開始一個計算循環,需要能夠在主視圖進行更新時進行更新。由於這是後臺線程,因此在呼叫完成之前屏幕不會更新。我如何在Swift中實現這一點?這是我目前使用的簡化方法,不起作用。從後臺線程更新主視圖 - Swift

@IBAction func calculatePower(sender: AnyObject) { 
    for day in 1...365 { 
     dispatch_async(dispatch_get_main_queue()) { 
      self.dayLabel.text = "\(day)" 
     } 
    } 
} 

我通常會添加一些0到循環,否則它完成得太快會只從1到365

在可可,我會用類似的語句:

[self performSelectorOnMainThread:@selector(updateDisplayEnergySunEquator:) withObject:[NSNumber numberWithDouble:distanceFromSun] waitUntilDone:YES]; 

任何想法?

+0

我看着那個線程 - 我會重新訪問它 - 謝謝。 –

回答

3

@IBAction函數在按下按鈕時在主線程中調用。會發生什麼情況是您的關閉在主線程中排隊,但您的主線程正忙於您的循環。基本上,你在一個線程內進行異步工作。

要在另一個線程上運行循環,請將其包裝在dispatch_async中並使用另一個隊列。

@IBAction func calculatePower(sender: AnyObject) { 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
     for day in 1...365 { 
      dispatch_async(dispatch_get_main_queue()) { 
       self.dayLabel.text = "\(day)" 
      } 
     } 
    } 
} 
+0

非常感謝 - 看起來像。我將在機器前面回家時測試。 –

+0

這是完美的作品,並設置了兩層。謝謝。 –