2013-08-19 3 views
0

У нас есть метод делегата, который будет вызываться примерно 20 раз в секунду. В методе делегата мы обновляем UILabel, который представляет собой счетчик, как показано ниже упомянутый код:Текст UILabel не обновляется на iPad.

- (void) counterUpdated:(NSString *) value 
    { 
     lblCounter.text = [NSString stringWithString:value]; 

     // [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; 

     // [lblCounter setNeedDisplay]; 

    } 

Я читал подобные проблемы переполнения стека, и я Внедрив там и я проверил с сохранением [lblCounter setNeedDisplay]; метода и [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]]; после обновления lblCounter, но он работает не так хорошо, как ожидалось.

Любые указатели?

+0

Вы должны войти lblCounter, чтобы убедиться, что он не равен нулю. Кроме того, нет необходимости использовать stringWithString: поскольку вы передаете строку. Строка должна быть: lblCounter.text = значение; – rdelmar

+0

Yep, 'stringWithString:' здесь не требуется. В журнале Im получает 'lblCounter.text' правильно, но' lblCounter' не обновляется на экране. –

+0

Что значит, что вы правильно получаете lblCounter.text? Он регистрируется правильно, но вы не видите его на экране? – rdelmar

ответ

0

Попробуйте использовать Grand Central Dispatch, чтобы запустить это в основном потоке:

dispatch_async(dispatch_get_main_queue(), ^{ 
    lblCounter.text = value; 
}); 
+0

. Я попытался решить проблему с GCD (dispatch_async), даже если он не обновляется должным образом. –