2015-02-08 7 views
1

Я пытаюсь обновить текст UILabel внутри обработчика метода queryPedometerDataFromDate (..). Обновление через UILabel отражается через 20 или 25 секунд. Но я вижу вывод println() почти в реальном времени. Есть ли способ сделать это быстрее? Если я обновляю текст UILabel вне этого обработчика, он снова обновляется в реальном времени.Обновление UILabel в реальном времени в Swift

 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

Извините! Я случайно написал другую очередь. Я имел в виду главную очередь. –

+0

Спасибо, человек, работал как шарм. Я считаю, что контрольный символ тоже опечатан. – Manish

3

Блока вы поставляетесь метода queryPedometerDataFromDate:toDate:withHandler: запускается на выполнение в последовательной очереди, а не в главном потоке. Вы должны сделать все свои обновления пользовательского интерфейса из основного потока. Вы можете сделать это, используя GCD следующим образом:

dispatch_async(dispatch_get_main_queue(), { 
    self.StringSteps.text = data.numberOfSteps.stringValue 
}) 
Смежные вопросы