2015-02-08 88 views
1

我正在嘗試更新queryPedometerDataFromDate(..)方法的處理程序內部的UILabel文本。 UILabel上的更新會在20或25秒後反映出來。但我幾乎可以實時看到println()輸出。有什麼辦法讓它更快? 如果我更新這個處理程序之外的UILabel的文本,然後再次實時更新。在Swift中實時更新UILabel

 pedoman.queryPedometerDataFromDate(yester, toDate: now) { 
     (data:CMPedometerData!, errr:NSError!) -> Void in 
     //Below statement take 20 to 30 second to reflect on UILabel 
     self.StringSteps.text = data.numberOfSteps.stringValue 
     //Below statement prints on Output in real time. 
     println("Number of Steps \(data.numberOfSteps)") 
    } 

回答

7

您需要更新主線程上的UILabel。

dispatch_async(dispatch_get_main_queue(), { 
self.StringSteps.text = data.numberOfSteps.stringValue 
}); 
+0

對不起!我不小心寫了另一個隊列。我的意思是主隊列。 – 2015-02-08 20:03:15

+0

謝謝你,像魅力一樣工作。我相信控制符號也是錯字。 – Manish 2015-02-08 20:58:30

3

您提供給queryPedometerDataFromDate:toDate:withHandler:方法的塊在串行隊列中執行,而不是在主線程中執行。你應該從主線程完成所有UI更新。您可以使用GCD這樣做:

dispatch_async(dispatch_get_main_queue(), { 
    self.StringSteps.text = data.numberOfSteps.stringValue 
})