у меня есть цикл, который выглядит такможно увидеть, что этикетка меняется.
Цикл работает нормально, но метка обновляется только после последней итерации цикла.
Кто-нибудь знает, почему это может быть?И будет ли способ это исправить?
Конечно, не всегда в главном потоке, и любое использование sleep во вторичных потоках, как правило, вызывает большие сомнения.
sleep
В этом случае просто используйте экземпляр NSTimer для периодического обновления значения (как сказал Уилбур).
Пользовательский интерфейс обновляется только в конце цикла выполнения, цикл которого выполняется внутри одной итерации. Вместо этого вы должны использовать NSTimer.
NSTimer
Лучше, если вы запустите свою строку в фоновом потоке
[self performSelectorInBackground:@selector(updateBusyLabel:) withObject:[NSString stringWithFormat:@"Processing ... %i",iteration]]; -(void)updateBusyLabel:(NSString *)busyText { [_busyLabel setText:busyText]; }
Я бы не использовал sleep (), а таймер - это слишком много работы.
Чтобы получить обновление, вы должны запустить его отдельно:
for(int x=0; x < 10; x++){ [self performSelectorOnMainThread:@selector(updateLabel) withObject:nil waitUntilDone:NO]; sleep(1); } - (void) updateLabel { [testLabel setText:[self randomString]]; }